// 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  BFu16ll_BFu1c_BFu15i  {
  __tsu64 v1:16;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu1c_BFu15i) C1{ FL:16 Fc:1 Fi:15}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu1c_C()
{
  {
    init_simple_test("BFu16ll_BFu1c_C");
    static STRUCT_IF_C BFu16ll_BFu1c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1c_C");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1c_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu1c_C, BFu16ll_BFu1c_C)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu1c_Uc()
{
  {
    init_simple_test("BFu16ll_BFu1c_Uc");
    static STRUCT_IF_C BFu16ll_BFu1c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1c_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu1c_Uc, BFu16ll_BFu1c_Uc)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu1i_BFu15s  {
  __tsu64 v1:16;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu1i_BFu15s) C1{ FL:16 Fi:1 Fs:15}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu1i_BFu7s  {
  __tsu64 v1:16;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu1i_BFu7s) C1{ FL:16 Fi:1 Fs:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu1i_C()
{
  {
    init_simple_test("BFu16ll_BFu1i_C");
    static STRUCT_IF_C BFu16ll_BFu1i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1i_C");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1i_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu1i_C, BFu16ll_BFu1i_C)
//============================================================================


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



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


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



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


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



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


struct  BFu16ll_BFu1i_Ip  {
  __tsu64 v1:16;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu16ll_BFu1i_Ip) C1{ FL:16 Fi:1 Fp}



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


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



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


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



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


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



static void Test_BFu16ll_BFu1i_Uc()
{
  {
    init_simple_test("BFu16ll_BFu1i_Uc");
    static STRUCT_IF_C BFu16ll_BFu1i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1i_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu1i_Uc, BFu16ll_BFu1i_Uc)
//============================================================================


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



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


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



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


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



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


struct  BFu16ll_BFu1i_Vp  {
  __tsu64 v1:16;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu16ll_BFu1i_Vp) C1{ FL:16 Fi:1 Fp}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu1ll_C()
{
  {
    init_simple_test("BFu16ll_BFu1ll_C");
    static STRUCT_IF_C BFu16ll_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1ll_C");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1ll_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu1ll_C, BFu16ll_BFu1ll_C)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu1ll_Uc()
{
  {
    init_simple_test("BFu16ll_BFu1ll_Uc");
    static STRUCT_IF_C BFu16ll_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1ll_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu1ll_Uc, BFu16ll_BFu1ll_Uc)
//============================================================================


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu1s_BFu15i  {
  __tsu64 v1:16;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu1s_BFu15i) C1{ FL:16 Fs:1 Fi:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu1s_BFu17i  {
  __tsu64 v1:16;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu1s_BFu17i) C1{ FL:16 Fs:1 Fi:17}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu1s_BFu31i  {
  __tsu64 v1:16;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu1s_BFu31i) C1{ FL:16 Fs:1 Fi:31}



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


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



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


struct  BFu16ll_BFu1s_BFu32i  {
  __tsu64 v1:16;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu1s_BFu32i) C1{ FL:16 Fs:1 Fi:32}



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


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



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


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



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


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



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


struct  BFu16ll_BFu1s_BFu7i  {
  __tsu64 v1:16;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu1s_BFu7i) C1{ FL:16 Fs:1 Fi:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu1s_C()
{
  {
    init_simple_test("BFu16ll_BFu1s_C");
    static STRUCT_IF_C BFu16ll_BFu1s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1s_C");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1s_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu1s_C, BFu16ll_BFu1s_C)
//============================================================================


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



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


struct  BFu16ll_BFu1s_F  {
  __tsu64 v1:16;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu16ll_BFu1s_F) C1{ FL:16 Fs:1 Fi}



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


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



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


struct  BFu16ll_BFu1s_Ip  {
  __tsu64 v1:16;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu16ll_BFu1s_Ip) C1{ FL:16 Fs:1 Fp}



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


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



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


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



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


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



static void Test_BFu16ll_BFu1s_Uc()
{
  {
    init_simple_test("BFu16ll_BFu1s_Uc");
    static STRUCT_IF_C BFu16ll_BFu1s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1s_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu1s_Uc, BFu16ll_BFu1s_Uc)
//============================================================================


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



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


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



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


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



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


struct  BFu16ll_BFu1s_Vp  {
  __tsu64 v1:16;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu16ll_BFu1s_Vp) C1{ FL:16 Fs:1 Fp}



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


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



static void Test_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i, BFu16ll_BFu31i)
//============================================================================


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



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


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



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


struct  BFu16ll_BFu31i_BFu15s  {
  __tsu64 v1:16;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu31i_BFu15s) C1{ FL:16 Fi:31 Fs:15}



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


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



static void Test_BFu16ll_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu16i, BFu16ll_BFu31i_BFu16i)
//============================================================================


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



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


struct  BFu16ll_BFu31i_BFu16s  {
  __tsu64 v1:16;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu31i_BFu16s) C1{ FL:16 Fi:31 Fs:16}



static void Test_BFu16ll_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu16s, BFu16ll_BFu31i_BFu16s)
//============================================================================


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



static void Test_BFu16ll_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu17i, BFu16ll_BFu31i_BFu17i)
//============================================================================


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



static void Test_BFu16ll_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu16ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu16ll_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu17ll, BFu16ll_BFu31i_BFu17ll)
//============================================================================


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



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


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



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


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



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


struct  BFu16ll_BFu31i_BFu1s  {
  __tsu64 v1:16;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu31i_BFu1s) C1{ FL:16 Fi:31 Fs:1}



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


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



static void Test_BFu16ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu31i, BFu16ll_BFu31i_BFu31i)
//============================================================================


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



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


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



static void Test_BFu16ll_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu32i, BFu16ll_BFu31i_BFu32i)
//============================================================================


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



static void Test_BFu16ll_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu16ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu16ll_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu32ll, BFu16ll_BFu31i_BFu32ll)
//============================================================================


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



static void Test_BFu16ll_BFu31i_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu33");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu16ll_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu16ll_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu33, BFu16ll_BFu31i_BFu33)
//============================================================================


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



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


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



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


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



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


struct  BFu16ll_BFu31i_BFu7s  {
  __tsu64 v1:16;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu31i_BFu7s) C1{ FL:16 Fi:31 Fs:7}



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu9i, BFu16ll_BFu31i_BFu9i)
//============================================================================


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



static void Test_BFu16ll_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu16ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu16ll_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu9ll, BFu16ll_BFu31i_BFu9ll)
//============================================================================


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



static void Test_BFu16ll_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu31i_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu31i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_BFu9s, BFu16ll_BFu31i_BFu9s)
//============================================================================


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



static void Test_BFu16ll_BFu31i_C()
{
  {
    init_simple_test("BFu16ll_BFu31i_C");
    static STRUCT_IF_C BFu16ll_BFu31i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_C, BFu16ll_BFu31i_C)
//============================================================================


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



static void Test_BFu16ll_BFu31i_D()
{
  {
    init_simple_test("BFu16ll_BFu31i_D");
    static STRUCT_IF_C BFu16ll_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_D, BFu16ll_BFu31i_D)
//============================================================================


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



static void Test_BFu16ll_BFu31i_F()
{
  {
    init_simple_test("BFu16ll_BFu31i_F");
    static STRUCT_IF_C BFu16ll_BFu31i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_F, BFu16ll_BFu31i_F)
//============================================================================


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



static void Test_BFu16ll_BFu31i_I()
{
  {
    init_simple_test("BFu16ll_BFu31i_I");
    static STRUCT_IF_C BFu16ll_BFu31i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_I, BFu16ll_BFu31i_I)
//============================================================================


struct  BFu16ll_BFu31i_Ip  {
  __tsu64 v1:16;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu16ll_BFu31i_Ip) C1{ FL:16 Fi:31 Fp}



static void Test_BFu16ll_BFu31i_Ip()
{
  {
    init_simple_test("BFu16ll_BFu31i_Ip");
    static STRUCT_IF_C BFu16ll_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_Ip, BFu16ll_BFu31i_Ip)
//============================================================================


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



static void Test_BFu16ll_BFu31i_L()
{
  {
    init_simple_test("BFu16ll_BFu31i_L");
    static STRUCT_IF_C BFu16ll_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_L, BFu16ll_BFu31i_L)
//============================================================================


struct  BFu16ll_BFu31i_S  {
  __tsu64 v1:16;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu16ll_BFu31i_S) C1{ FL:16 Fi:31 Fs}



static void Test_BFu16ll_BFu31i_S()
{
  {
    init_simple_test("BFu16ll_BFu31i_S");
    static STRUCT_IF_C BFu16ll_BFu31i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_S, BFu16ll_BFu31i_S)
//============================================================================


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



static void Test_BFu16ll_BFu31i_Uc()
{
  {
    init_simple_test("BFu16ll_BFu31i_Uc");
    static STRUCT_IF_C BFu16ll_BFu31i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_Uc, BFu16ll_BFu31i_Uc)
//============================================================================


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



static void Test_BFu16ll_BFu31i_Ui()
{
  {
    init_simple_test("BFu16ll_BFu31i_Ui");
    static STRUCT_IF_C BFu16ll_BFu31i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_Ui, BFu16ll_BFu31i_Ui)
//============================================================================


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



static void Test_BFu16ll_BFu31i_Ul()
{
  {
    init_simple_test("BFu16ll_BFu31i_Ul");
    static STRUCT_IF_C BFu16ll_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_Ul, BFu16ll_BFu31i_Ul)
//============================================================================


struct  BFu16ll_BFu31i_Us  {
  __tsu64 v1:16;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu31i_Us) C1{ FL:16 Fi:31 Fs}



static void Test_BFu16ll_BFu31i_Us()
{
  {
    init_simple_test("BFu16ll_BFu31i_Us");
    static STRUCT_IF_C BFu16ll_BFu31i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_Us, BFu16ll_BFu31i_Us)
//============================================================================


struct  BFu16ll_BFu31i_Vp  {
  __tsu64 v1:16;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu16ll_BFu31i_Vp) C1{ FL:16 Fi:31 Fp}



static void Test_BFu16ll_BFu31i_Vp()
{
  {
    init_simple_test("BFu16ll_BFu31i_Vp");
    static STRUCT_IF_C BFu16ll_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31i_Vp, BFu16ll_BFu31i_Vp)
//============================================================================


struct  BFu16ll_BFu31ll  {
  __tsu64 v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu16ll_BFu31ll) C1{ FL:16 FL:31}



static void Test_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll, BFu16ll_BFu31ll)
//============================================================================


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



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


struct  BFu16ll_BFu31ll_BFu15ll  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu31ll_BFu15ll) C1{ FL:16 FL:31 FL:15}



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu16ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu16ll_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu17i, BFu16ll_BFu31ll_BFu17i)
//============================================================================


struct  BFu16ll_BFu31ll_BFu17ll  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu31ll_BFu17ll) C1{ FL:16 FL:31 FL:17}



static void Test_BFu16ll_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu16ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu16ll_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu17ll, BFu16ll_BFu31ll_BFu17ll)
//============================================================================


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu31i, BFu16ll_BFu31ll_BFu31i)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu16ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu31ll, BFu16ll_BFu31ll_BFu31ll)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu32i, BFu16ll_BFu31ll_BFu32i)
//============================================================================


struct  BFu16ll_BFu31ll_BFu32ll  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu31ll_BFu32ll) C1{ FL:16 FL:31 FL:32}



static void Test_BFu16ll_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu16ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu16ll_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu32ll, BFu16ll_BFu31ll_BFu32ll)
//============================================================================


struct  BFu16ll_BFu31ll_BFu33  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu31ll_BFu33) C1{ FL:16 FL:31 FL:33}



static void Test_BFu16ll_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu33");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu16ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu16ll_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu33, BFu16ll_BFu31ll_BFu33)
//============================================================================


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



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


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



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


struct  BFu16ll_BFu31ll_BFu7ll  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu31ll_BFu7ll) C1{ FL:16 FL:31 FL:7}



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


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



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


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



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


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



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


struct  BFu16ll_BFu31ll_BFu8ll  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu31ll_BFu8ll) C1{ FL:16 FL:31 FL:8}



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


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



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


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



static void Test_BFu16ll_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu16ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu16ll_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu9i, BFu16ll_BFu31ll_BFu9i)
//============================================================================


struct  BFu16ll_BFu31ll_BFu9ll  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu31ll_BFu9ll) C1{ FL:16 FL:31 FL:9}



static void Test_BFu16ll_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu16ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu16ll_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_BFu9ll, BFu16ll_BFu31ll_BFu9ll)
//============================================================================


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



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


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



static void Test_BFu16ll_BFu31ll_C()
{
  {
    init_simple_test("BFu16ll_BFu31ll_C");
    static STRUCT_IF_C BFu16ll_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_C");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_C");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_C");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_C, BFu16ll_BFu31ll_C)
//============================================================================


struct  BFu16ll_BFu31ll_D  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu16ll_BFu31ll_D) C1{ FL:16 FL:31 FL}



static void Test_BFu16ll_BFu31ll_D()
{
  {
    init_simple_test("BFu16ll_BFu31ll_D");
    static STRUCT_IF_C BFu16ll_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_D");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_D");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_D, BFu16ll_BFu31ll_D)
//============================================================================


struct  BFu16ll_BFu31ll_F  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu16ll_BFu31ll_F) C1{ FL:16 FL:31 Fi}



static void Test_BFu16ll_BFu31ll_F()
{
  {
    init_simple_test("BFu16ll_BFu31ll_F");
    static STRUCT_IF_C BFu16ll_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_F");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_F");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_F, BFu16ll_BFu31ll_F)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_I()
{
  {
    init_simple_test("BFu16ll_BFu31ll_I");
    static STRUCT_IF_C BFu16ll_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_I");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_I");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_I, BFu16ll_BFu31ll_I)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_Ip()
{
  {
    init_simple_test("BFu16ll_BFu31ll_Ip");
    static STRUCT_IF_C BFu16ll_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_Ip, BFu16ll_BFu31ll_Ip)
//============================================================================


struct  BFu16ll_BFu31ll_L  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu31ll_L) C1{ FL:16 FL:31 FL}



static void Test_BFu16ll_BFu31ll_L()
{
  {
    init_simple_test("BFu16ll_BFu31ll_L");
    static STRUCT_IF_C BFu16ll_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_L");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_L");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_L, BFu16ll_BFu31ll_L)
//============================================================================


struct  BFu16ll_BFu31ll_S  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu16ll_BFu31ll_S) C1{ FL:16 FL:31 Fs}



static void Test_BFu16ll_BFu31ll_S()
{
  {
    init_simple_test("BFu16ll_BFu31ll_S");
    static STRUCT_IF_C BFu16ll_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_S");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_S");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_S, BFu16ll_BFu31ll_S)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_Uc()
{
  {
    init_simple_test("BFu16ll_BFu31ll_Uc");
    static STRUCT_IF_C BFu16ll_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_Uc");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_Uc, BFu16ll_BFu31ll_Uc)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_Ui()
{
  {
    init_simple_test("BFu16ll_BFu31ll_Ui");
    static STRUCT_IF_C BFu16ll_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_Ui, BFu16ll_BFu31ll_Ui)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_Ul()
{
  {
    init_simple_test("BFu16ll_BFu31ll_Ul");
    static STRUCT_IF_C BFu16ll_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_Ul, BFu16ll_BFu31ll_Ul)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_Us()
{
  {
    init_simple_test("BFu16ll_BFu31ll_Us");
    static STRUCT_IF_C BFu16ll_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_Us, BFu16ll_BFu31ll_Us)
//============================================================================


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



static void Test_BFu16ll_BFu31ll_Vp()
{
  {
    init_simple_test("BFu16ll_BFu31ll_Vp");
    static STRUCT_IF_C BFu16ll_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu31ll_Vp, BFu16ll_BFu31ll_Vp)
//============================================================================


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



static void Test_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i, BFu16ll_BFu32i)
//============================================================================


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



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


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



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


struct  BFu16ll_BFu32i_BFu15s  {
  __tsu64 v1:16;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu32i_BFu15s) C1{ FL:16 Fi:32 Fs:15}



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


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



static void Test_BFu16ll_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu16i, BFu16ll_BFu32i_BFu16i)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu16ll, BFu16ll_BFu32i_BFu16ll)
//============================================================================


struct  BFu16ll_BFu32i_BFu16s  {
  __tsu64 v1:16;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu32i_BFu16s) C1{ FL:16 Fi:32 Fs:16}



static void Test_BFu16ll_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu16s, BFu16ll_BFu32i_BFu16s)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu17i, BFu16ll_BFu32i_BFu17i)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu17ll, BFu16ll_BFu32i_BFu17ll)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu1c");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu1c, BFu16ll_BFu32i_BFu1c)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu1i");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu1i, BFu16ll_BFu32i_BFu1i)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu1ll, BFu16ll_BFu32i_BFu1ll)
//============================================================================


struct  BFu16ll_BFu32i_BFu1s  {
  __tsu64 v1:16;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu32i_BFu1s) C1{ FL:16 Fi:32 Fs:1}



static void Test_BFu16ll_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu1s");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu1s, BFu16ll_BFu32i_BFu1s)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu31i, BFu16ll_BFu32i_BFu31i)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu31ll, BFu16ll_BFu32i_BFu31ll)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu32i, BFu16ll_BFu32i_BFu32i)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu32ll, BFu16ll_BFu32i_BFu32ll)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu33");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu16ll_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu33, BFu16ll_BFu32i_BFu33)
//============================================================================


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



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


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



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


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



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


struct  BFu16ll_BFu32i_BFu7s  {
  __tsu64 v1:16;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu32i_BFu7s) C1{ FL:16 Fi:32 Fs:7}



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu9i, BFu16ll_BFu32i_BFu9i)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu9ll, BFu16ll_BFu32i_BFu9ll)
//============================================================================


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



static void Test_BFu16ll_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu32i_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu32i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_BFu9s, BFu16ll_BFu32i_BFu9s)
//============================================================================


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



static void Test_BFu16ll_BFu32i_C()
{
  {
    init_simple_test("BFu16ll_BFu32i_C");
    static STRUCT_IF_C BFu16ll_BFu32i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_C, BFu16ll_BFu32i_C)
//============================================================================


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



static void Test_BFu16ll_BFu32i_D()
{
  {
    init_simple_test("BFu16ll_BFu32i_D");
    static STRUCT_IF_C BFu16ll_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_D, BFu16ll_BFu32i_D)
//============================================================================


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



static void Test_BFu16ll_BFu32i_F()
{
  {
    init_simple_test("BFu16ll_BFu32i_F");
    static STRUCT_IF_C BFu16ll_BFu32i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_F, BFu16ll_BFu32i_F)
//============================================================================


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



static void Test_BFu16ll_BFu32i_I()
{
  {
    init_simple_test("BFu16ll_BFu32i_I");
    static STRUCT_IF_C BFu16ll_BFu32i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_I, BFu16ll_BFu32i_I)
//============================================================================


struct  BFu16ll_BFu32i_Ip  {
  __tsu64 v1:16;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu16ll_BFu32i_Ip) C1{ FL:16 Fi:32 Fp}



static void Test_BFu16ll_BFu32i_Ip()
{
  {
    init_simple_test("BFu16ll_BFu32i_Ip");
    static STRUCT_IF_C BFu16ll_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_Ip, BFu16ll_BFu32i_Ip)
//============================================================================


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



static void Test_BFu16ll_BFu32i_L()
{
  {
    init_simple_test("BFu16ll_BFu32i_L");
    static STRUCT_IF_C BFu16ll_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_L, BFu16ll_BFu32i_L)
//============================================================================


struct  BFu16ll_BFu32i_S  {
  __tsu64 v1:16;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu16ll_BFu32i_S) C1{ FL:16 Fi:32 Fs}



static void Test_BFu16ll_BFu32i_S()
{
  {
    init_simple_test("BFu16ll_BFu32i_S");
    static STRUCT_IF_C BFu16ll_BFu32i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_S, BFu16ll_BFu32i_S)
//============================================================================


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



static void Test_BFu16ll_BFu32i_Uc()
{
  {
    init_simple_test("BFu16ll_BFu32i_Uc");
    static STRUCT_IF_C BFu16ll_BFu32i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_Uc, BFu16ll_BFu32i_Uc)
//============================================================================


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



static void Test_BFu16ll_BFu32i_Ui()
{
  {
    init_simple_test("BFu16ll_BFu32i_Ui");
    static STRUCT_IF_C BFu16ll_BFu32i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_Ui, BFu16ll_BFu32i_Ui)
//============================================================================


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



static void Test_BFu16ll_BFu32i_Ul()
{
  {
    init_simple_test("BFu16ll_BFu32i_Ul");
    static STRUCT_IF_C BFu16ll_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_Ul, BFu16ll_BFu32i_Ul)
//============================================================================


struct  BFu16ll_BFu32i_Us  {
  __tsu64 v1:16;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu32i_Us) C1{ FL:16 Fi:32 Fs}



static void Test_BFu16ll_BFu32i_Us()
{
  {
    init_simple_test("BFu16ll_BFu32i_Us");
    static STRUCT_IF_C BFu16ll_BFu32i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_Us, BFu16ll_BFu32i_Us)
//============================================================================


struct  BFu16ll_BFu32i_Vp  {
  __tsu64 v1:16;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu16ll_BFu32i_Vp) C1{ FL:16 Fi:32 Fp}



static void Test_BFu16ll_BFu32i_Vp()
{
  {
    init_simple_test("BFu16ll_BFu32i_Vp");
    static STRUCT_IF_C BFu16ll_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32i_Vp, BFu16ll_BFu32i_Vp)
//============================================================================


struct  BFu16ll_BFu32ll  {
  __tsu64 v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu16ll_BFu32ll) C1{ FL:16 FL:32}



static void Test_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll, BFu16ll_BFu32ll)
//============================================================================


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



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


struct  BFu16ll_BFu32ll_BFu15ll  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu32ll_BFu15ll) C1{ FL:16 FL:32 FL:15}



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


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu32ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_BFu17i, BFu16ll_BFu32ll_BFu17i)
//============================================================================


struct  BFu16ll_BFu32ll_BFu17ll  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu32ll_BFu17ll) C1{ FL:16 FL:32 FL:17}



static void Test_BFu16ll_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu16ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_BFu17ll, BFu16ll_BFu32ll_BFu17ll)
//============================================================================


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_BFu31i, BFu16ll_BFu32ll_BFu31i)
//============================================================================


struct  BFu16ll_BFu32ll_BFu31ll  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu32ll_BFu31ll) C1{ FL:16 FL:32 FL:31}



static void Test_BFu16ll_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu16ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_BFu31ll, BFu16ll_BFu32ll_BFu31ll)
//============================================================================


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



static void Test_BFu16ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_BFu32i, BFu16ll_BFu32ll_BFu32i)
//============================================================================


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



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


struct  BFu16ll_BFu32ll_BFu33  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu32ll_BFu33) C1{ FL:16 FL:32 FL:33}



static void Test_BFu16ll_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu32ll_BFu33");
    static STRUCT_IF_C BFu16ll_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu16ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_BFu33, BFu16ll_BFu32ll_BFu33)
//============================================================================


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



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


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



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


struct  BFu16ll_BFu32ll_BFu7ll  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu32ll_BFu7ll) C1{ FL:16 FL:32 FL:7}



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


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



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


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



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


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



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


struct  BFu16ll_BFu32ll_BFu8ll  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu32ll_BFu8ll) C1{ FL:16 FL:32 FL:8}



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


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



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


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



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


struct  BFu16ll_BFu32ll_BFu9ll  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu32ll_BFu9ll) C1{ FL:16 FL:32 FL:9}



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


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



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


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



static void Test_BFu16ll_BFu32ll_C()
{
  {
    init_simple_test("BFu16ll_BFu32ll_C");
    static STRUCT_IF_C BFu16ll_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_C");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_C");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_C");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_C, BFu16ll_BFu32ll_C)
//============================================================================


struct  BFu16ll_BFu32ll_D  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu16ll_BFu32ll_D) C1{ FL:16 FL:32 FL}



static void Test_BFu16ll_BFu32ll_D()
{
  {
    init_simple_test("BFu16ll_BFu32ll_D");
    static STRUCT_IF_C BFu16ll_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_D");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_D");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_D, BFu16ll_BFu32ll_D)
//============================================================================


struct  BFu16ll_BFu32ll_F  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu16ll_BFu32ll_F) C1{ FL:16 FL:32 Fi}



static void Test_BFu16ll_BFu32ll_F()
{
  {
    init_simple_test("BFu16ll_BFu32ll_F");
    static STRUCT_IF_C BFu16ll_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_F");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_F");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_F, BFu16ll_BFu32ll_F)
//============================================================================


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



static void Test_BFu16ll_BFu32ll_I()
{
  {
    init_simple_test("BFu16ll_BFu32ll_I");
    static STRUCT_IF_C BFu16ll_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_I");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_I");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_I, BFu16ll_BFu32ll_I)
//============================================================================


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



static void Test_BFu16ll_BFu32ll_Ip()
{
  {
    init_simple_test("BFu16ll_BFu32ll_Ip");
    static STRUCT_IF_C BFu16ll_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_Ip, BFu16ll_BFu32ll_Ip)
//============================================================================


struct  BFu16ll_BFu32ll_L  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu32ll_L) C1{ FL:16 FL:32 FL}



static void Test_BFu16ll_BFu32ll_L()
{
  {
    init_simple_test("BFu16ll_BFu32ll_L");
    static STRUCT_IF_C BFu16ll_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_L");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_L");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_L, BFu16ll_BFu32ll_L)
//============================================================================


struct  BFu16ll_BFu32ll_S  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu16ll_BFu32ll_S) C1{ FL:16 FL:32 Fs}



static void Test_BFu16ll_BFu32ll_S()
{
  {
    init_simple_test("BFu16ll_BFu32ll_S");
    static STRUCT_IF_C BFu16ll_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_S");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_S");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_S");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_S, BFu16ll_BFu32ll_S)
//============================================================================


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



static void Test_BFu16ll_BFu32ll_Uc()
{
  {
    init_simple_test("BFu16ll_BFu32ll_Uc");
    static STRUCT_IF_C BFu16ll_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_Uc");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_Uc, BFu16ll_BFu32ll_Uc)
//============================================================================


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



static void Test_BFu16ll_BFu32ll_Ui()
{
  {
    init_simple_test("BFu16ll_BFu32ll_Ui");
    static STRUCT_IF_C BFu16ll_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_Ui, BFu16ll_BFu32ll_Ui)
//============================================================================


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



static void Test_BFu16ll_BFu32ll_Ul()
{
  {
    init_simple_test("BFu16ll_BFu32ll_Ul");
    static STRUCT_IF_C BFu16ll_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_Ul, BFu16ll_BFu32ll_Ul)
//============================================================================


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



static void Test_BFu16ll_BFu32ll_Us()
{
  {
    init_simple_test("BFu16ll_BFu32ll_Us");
    static STRUCT_IF_C BFu16ll_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_Us, BFu16ll_BFu32ll_Us)
//============================================================================


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



static void Test_BFu16ll_BFu32ll_Vp()
{
  {
    init_simple_test("BFu16ll_BFu32ll_Vp");
    static STRUCT_IF_C BFu16ll_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu32ll_Vp, BFu16ll_BFu32ll_Vp)
//============================================================================


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



static void Test_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu33");
    static STRUCT_IF_C BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33, BFu16ll_BFu33)
//============================================================================


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



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


struct  BFu16ll_BFu33_BFu15ll  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu33_BFu15ll) C1{ FL:16 FL:33 FL:15}



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


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



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


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



static void Test_BFu16ll_BFu33_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu33_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu33_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_BFu16i, BFu16ll_BFu33_BFu16i)
//============================================================================


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



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


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



static void Test_BFu16ll_BFu33_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu33_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu33_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_BFu16s, BFu16ll_BFu33_BFu16s)
//============================================================================


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



static void Test_BFu16ll_BFu33_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu33_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu33_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_BFu17i, BFu16ll_BFu33_BFu17i)
//============================================================================


struct  BFu16ll_BFu33_BFu17ll  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu33_BFu17ll) C1{ FL:16 FL:33 FL:17}



static void Test_BFu16ll_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu33_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu33_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu16ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu16ll_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_BFu17ll, BFu16ll_BFu33_BFu17ll)
//============================================================================


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



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


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



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


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



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


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



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


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



static void Test_BFu16ll_BFu33_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu33_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_BFu31i, BFu16ll_BFu33_BFu31i)
//============================================================================


struct  BFu16ll_BFu33_BFu31ll  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu33_BFu31ll) C1{ FL:16 FL:33 FL:31}



static void Test_BFu16ll_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu33_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu16ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu16ll_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_BFu31ll, BFu16ll_BFu33_BFu31ll)
//============================================================================


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



static void Test_BFu16ll_BFu33_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu33_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_BFu32i, BFu16ll_BFu33_BFu32i)
//============================================================================


struct  BFu16ll_BFu33_BFu32ll  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu33_BFu32ll) C1{ FL:16 FL:33 FL:32}



static void Test_BFu16ll_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu33_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu16ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu16ll_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_BFu32ll, BFu16ll_BFu33_BFu32ll)
//============================================================================


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



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


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



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


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



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


struct  BFu16ll_BFu33_BFu7ll  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu33_BFu7ll) C1{ FL:16 FL:33 FL:7}



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


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



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


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



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


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



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


struct  BFu16ll_BFu33_BFu8ll  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu33_BFu8ll) C1{ FL:16 FL:33 FL:8}



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


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



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


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



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


struct  BFu16ll_BFu33_BFu9ll  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu33_BFu9ll) C1{ FL:16 FL:33 FL:9}



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


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



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


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



static void Test_BFu16ll_BFu33_C()
{
  {
    init_simple_test("BFu16ll_BFu33_C");
    static STRUCT_IF_C BFu16ll_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_C");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_C");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_C");
    check_field_offset(lv, v3, 7, "BFu16ll_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_C, BFu16ll_BFu33_C)
//============================================================================


struct  BFu16ll_BFu33_D  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu16ll_BFu33_D) C1{ FL:16 FL:33 FL}



static void Test_BFu16ll_BFu33_D()
{
  {
    init_simple_test("BFu16ll_BFu33_D");
    static STRUCT_IF_C BFu16ll_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_D");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_D");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_D, BFu16ll_BFu33_D)
//============================================================================


struct  BFu16ll_BFu33_F  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu16ll_BFu33_F) C1{ FL:16 FL:33 Fi}



static void Test_BFu16ll_BFu33_F()
{
  {
    init_simple_test("BFu16ll_BFu33_F");
    static STRUCT_IF_C BFu16ll_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_F");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_F");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_F, BFu16ll_BFu33_F)
//============================================================================


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



static void Test_BFu16ll_BFu33_I()
{
  {
    init_simple_test("BFu16ll_BFu33_I");
    static STRUCT_IF_C BFu16ll_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_I");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_I");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_I, BFu16ll_BFu33_I)
//============================================================================


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



static void Test_BFu16ll_BFu33_Ip()
{
  {
    init_simple_test("BFu16ll_BFu33_Ip");
    static STRUCT_IF_C BFu16ll_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_Ip");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_Ip");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_Ip, BFu16ll_BFu33_Ip)
//============================================================================


struct  BFu16ll_BFu33_L  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu33_L) C1{ FL:16 FL:33 FL}



static void Test_BFu16ll_BFu33_L()
{
  {
    init_simple_test("BFu16ll_BFu33_L");
    static STRUCT_IF_C BFu16ll_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_L");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_L");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_L, BFu16ll_BFu33_L)
//============================================================================


struct  BFu16ll_BFu33_S  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu16ll_BFu33_S) C1{ FL:16 FL:33 Fs}



static void Test_BFu16ll_BFu33_S()
{
  {
    init_simple_test("BFu16ll_BFu33_S");
    static STRUCT_IF_C BFu16ll_BFu33_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_S");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_S");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_S");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_S, BFu16ll_BFu33_S)
//============================================================================


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



static void Test_BFu16ll_BFu33_Uc()
{
  {
    init_simple_test("BFu16ll_BFu33_Uc");
    static STRUCT_IF_C BFu16ll_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_Uc");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_Uc");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_Uc");
    check_field_offset(lv, v3, 7, "BFu16ll_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_Uc, BFu16ll_BFu33_Uc)
//============================================================================


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



static void Test_BFu16ll_BFu33_Ui()
{
  {
    init_simple_test("BFu16ll_BFu33_Ui");
    static STRUCT_IF_C BFu16ll_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_Ui");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_Ui");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_Ui, BFu16ll_BFu33_Ui)
//============================================================================


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



static void Test_BFu16ll_BFu33_Ul()
{
  {
    init_simple_test("BFu16ll_BFu33_Ul");
    static STRUCT_IF_C BFu16ll_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_Ul");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_Ul");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_Ul, BFu16ll_BFu33_Ul)
//============================================================================


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



static void Test_BFu16ll_BFu33_Us()
{
  {
    init_simple_test("BFu16ll_BFu33_Us");
    static STRUCT_IF_C BFu16ll_BFu33_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_Us");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_Us");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_Us");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_Us, BFu16ll_BFu33_Us)
//============================================================================


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



static void Test_BFu16ll_BFu33_Vp()
{
  {
    init_simple_test("BFu16ll_BFu33_Vp");
    static STRUCT_IF_C BFu16ll_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_Vp");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_Vp");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu33_Vp, BFu16ll_BFu33_Vp)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu7i_BFu15s  {
  __tsu64 v1:16;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu7i_BFu15s) C1{ FL:16 Fi:7 Fs:15}



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


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



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


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



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


struct  BFu16ll_BFu7i_BFu16s  {
  __tsu64 v1:16;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu7i_BFu16s) C1{ FL:16 Fi:7 Fs:16}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu7i_BFu1s  {
  __tsu64 v1:16;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu7i_BFu1s) C1{ FL:16 Fi:7 Fs:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu7i_BFu7s  {
  __tsu64 v1:16;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu7i_BFu7s) C1{ FL:16 Fi:7 Fs:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu7i_Ip  {
  __tsu64 v1:16;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu16ll_BFu7i_Ip) C1{ FL:16 Fi:7 Fp}



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


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



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


struct  BFu16ll_BFu7i_S  {
  __tsu64 v1:16;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu16ll_BFu7i_S) C1{ FL:16 Fi:7 Fs}



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


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



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


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



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


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



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


struct  BFu16ll_BFu7i_Us  {
  __tsu64 v1:16;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu7i_Us) C1{ FL:16 Fi:7 Fs}



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


struct  BFu16ll_BFu7i_Vp  {
  __tsu64 v1:16;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu16ll_BFu7i_Vp) C1{ FL:16 Fi:7 Fp}



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


struct  BFu16ll_BFu7ll  {
  __tsu64 v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu16ll_BFu7ll) C1{ FL:16 FL:7}



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


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



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


struct  BFu16ll_BFu7ll_BFu15ll  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu7ll_BFu15ll) C1{ FL:16 FL:7 FL:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu7ll_BFu17ll  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu7ll_BFu17ll) C1{ FL:16 FL:7 FL:17}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu7ll_BFu31ll  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu7ll_BFu31ll) C1{ FL:16 FL:7 FL:31}



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


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



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


struct  BFu16ll_BFu7ll_BFu32ll  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu7ll_BFu32ll) C1{ FL:16 FL:7 FL:32}



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


struct  BFu16ll_BFu7ll_BFu33  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu7ll_BFu33) C1{ FL:16 FL:7 FL:33}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu7ll_BFu8ll  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu7ll_BFu8ll) C1{ FL:16 FL:7 FL:8}



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


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



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


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



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


struct  BFu16ll_BFu7ll_BFu9ll  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu7ll_BFu9ll) C1{ FL:16 FL:7 FL:9}



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


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



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


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



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


struct  BFu16ll_BFu7ll_D  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu16ll_BFu7ll_D) C1{ FL:16 FL:7 FL}



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


struct  BFu16ll_BFu7ll_F  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu16ll_BFu7ll_F) C1{ FL:16 FL:7 Fi}



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


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



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


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



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


struct  BFu16ll_BFu7ll_L  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu7ll_L) C1{ FL:16 FL:7 FL}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu16ll_BFu7s_BFu15i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu7s_BFu15i) C1{ FL:16 Fs:7 Fi:15}



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


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



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


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



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


struct  BFu16ll_BFu7s_BFu16i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_BFu7s_BFu16i) C1{ FL:16 Fs:7 Fi:16}



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


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



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


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



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


struct  BFu16ll_BFu7s_BFu17i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu7s_BFu17i) C1{ FL:16 Fs:7 Fi:17}



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


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



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


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



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


struct  BFu16ll_BFu7s_BFu1i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_BFu7s_BFu1i) C1{ FL:16 Fs:7 Fi:1}



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


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



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


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



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


struct  BFu16ll_BFu7s_BFu31i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu7s_BFu31i) C1{ FL:16 Fs:7 Fi:31}



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


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



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


struct  BFu16ll_BFu7s_BFu32i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu7s_BFu32i) C1{ FL:16 Fs:7 Fi:32}



static void Test_BFu16ll_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu7s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu32i, BFu16ll_BFu7s_BFu32i)
//============================================================================


struct  BFu16ll_BFu7s_BFu32ll  {
  __tsu64 v1:16;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu7s_BFu32ll) C1{ FL:16 Fs:7 FL:32}



static void Test_BFu16ll_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu16ll_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu16ll_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu32ll, BFu16ll_BFu7s_BFu32ll)
//============================================================================


struct  BFu16ll_BFu7s_BFu33  {
  __tsu64 v1:16;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu7s_BFu33) C1{ FL:16 Fs:7 FL:33}



static void Test_BFu16ll_BFu7s_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu33");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu16ll_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu16ll_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu33, BFu16ll_BFu7s_BFu33)
//============================================================================


struct  BFu16ll_BFu7s_BFu7c  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_BFu7s_BFu7c) C1{ FL:16 Fs:7 Fc:7}



static void Test_BFu16ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu7c, BFu16ll_BFu7s_BFu7c)
//============================================================================


struct  BFu16ll_BFu7s_BFu7i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu7s_BFu7i) C1{ FL:16 Fs:7 Fi:7}



static void Test_BFu16ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu7i, BFu16ll_BFu7s_BFu7i)
//============================================================================


struct  BFu16ll_BFu7s_BFu7ll  {
  __tsu64 v1:16;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu7s_BFu7ll) C1{ FL:16 Fs:7 FL:7}



static void Test_BFu16ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu7ll, BFu16ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu16ll_BFu7s_BFu7s  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu7s_BFu7s) C1{ FL:16 Fs:7 Fs:7}



static void Test_BFu16ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu7s, BFu16ll_BFu7s_BFu7s)
//============================================================================


struct  BFu16ll_BFu7s_BFu8c  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_BFu7s_BFu8c) C1{ FL:16 Fs:7 Fc:8}



static void Test_BFu16ll_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu8c, BFu16ll_BFu7s_BFu8c)
//============================================================================


struct  BFu16ll_BFu7s_BFu8i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_BFu7s_BFu8i) C1{ FL:16 Fs:7 Fi:8}



static void Test_BFu16ll_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16ll_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16ll_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu8i, BFu16ll_BFu7s_BFu8i)
//============================================================================


struct  BFu16ll_BFu7s_BFu8ll  {
  __tsu64 v1:16;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu7s_BFu8ll) C1{ FL:16 Fs:7 FL:8}



static void Test_BFu16ll_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16ll_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16ll_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu8ll, BFu16ll_BFu7s_BFu8ll)
//============================================================================


struct  BFu16ll_BFu7s_BFu8s  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_BFu7s_BFu8s) C1{ FL:16 Fs:7 Fs:8}



static void Test_BFu16ll_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16ll_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16ll_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu8s, BFu16ll_BFu7s_BFu8s)
//============================================================================


struct  BFu16ll_BFu7s_BFu9i  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_BFu7s_BFu9i) C1{ FL:16 Fs:7 Fi:9}



static void Test_BFu16ll_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16ll_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16ll_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu9i, BFu16ll_BFu7s_BFu9i)
//============================================================================


struct  BFu16ll_BFu7s_BFu9ll  {
  __tsu64 v1:16;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu7s_BFu9ll) C1{ FL:16 Fs:7 FL:9}



static void Test_BFu16ll_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16ll_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16ll_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu9ll, BFu16ll_BFu7s_BFu9ll)
//============================================================================


struct  BFu16ll_BFu7s_BFu9s  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_BFu7s_BFu9s) C1{ FL:16 Fs:7 Fs:9}



static void Test_BFu16ll_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu7s_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu7s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16ll_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16ll_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_BFu9s, BFu16ll_BFu7s_BFu9s)
//============================================================================


struct  BFu16ll_BFu7s_C  {
  __tsu64 v1:16;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu16ll_BFu7s_C) C1{ FL:16 Fs:7 Fc}



static void Test_BFu16ll_BFu7s_C()
{
  {
    init_simple_test("BFu16ll_BFu7s_C");
    static STRUCT_IF_C BFu16ll_BFu7s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_C, BFu16ll_BFu7s_C)
//============================================================================


struct  BFu16ll_BFu7s_D  {
  __tsu64 v1:16;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu16ll_BFu7s_D) C1{ FL:16 Fs:7 FL}



static void Test_BFu16ll_BFu7s_D()
{
  {
    init_simple_test("BFu16ll_BFu7s_D");
    static STRUCT_IF_C BFu16ll_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_D, BFu16ll_BFu7s_D)
//============================================================================


struct  BFu16ll_BFu7s_F  {
  __tsu64 v1:16;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu16ll_BFu7s_F) C1{ FL:16 Fs:7 Fi}



static void Test_BFu16ll_BFu7s_F()
{
  {
    init_simple_test("BFu16ll_BFu7s_F");
    static STRUCT_IF_C BFu16ll_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu7s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_F, BFu16ll_BFu7s_F)
//============================================================================


struct  BFu16ll_BFu7s_I  {
  __tsu64 v1:16;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu16ll_BFu7s_I) C1{ FL:16 Fs:7 Fi}



static void Test_BFu16ll_BFu7s_I()
{
  {
    init_simple_test("BFu16ll_BFu7s_I");
    static STRUCT_IF_C BFu16ll_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu7s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_I, BFu16ll_BFu7s_I)
//============================================================================


struct  BFu16ll_BFu7s_Ip  {
  __tsu64 v1:16;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu16ll_BFu7s_Ip) C1{ FL:16 Fs:7 Fp}



static void Test_BFu16ll_BFu7s_Ip()
{
  {
    init_simple_test("BFu16ll_BFu7s_Ip");
    static STRUCT_IF_C BFu16ll_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_Ip, BFu16ll_BFu7s_Ip)
//============================================================================


struct  BFu16ll_BFu7s_L  {
  __tsu64 v1:16;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu7s_L) C1{ FL:16 Fs:7 FL}



static void Test_BFu16ll_BFu7s_L()
{
  {
    init_simple_test("BFu16ll_BFu7s_L");
    static STRUCT_IF_C BFu16ll_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_L, BFu16ll_BFu7s_L)
//============================================================================


struct  BFu16ll_BFu7s_S  {
  __tsu64 v1:16;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu16ll_BFu7s_S) C1{ FL:16 Fs:7 Fs}



static void Test_BFu16ll_BFu7s_S()
{
  {
    init_simple_test("BFu16ll_BFu7s_S");
    static STRUCT_IF_C BFu16ll_BFu7s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu7s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_S");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_S, BFu16ll_BFu7s_S)
//============================================================================


struct  BFu16ll_BFu7s_Uc  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu16ll_BFu7s_Uc) C1{ FL:16 Fs:7 Fc}



static void Test_BFu16ll_BFu7s_Uc()
{
  {
    init_simple_test("BFu16ll_BFu7s_Uc");
    static STRUCT_IF_C BFu16ll_BFu7s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_Uc, BFu16ll_BFu7s_Uc)
//============================================================================


struct  BFu16ll_BFu7s_Ui  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu16ll_BFu7s_Ui) C1{ FL:16 Fs:7 Fi}



static void Test_BFu16ll_BFu7s_Ui()
{
  {
    init_simple_test("BFu16ll_BFu7s_Ui");
    static STRUCT_IF_C BFu16ll_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu7s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_Ui, BFu16ll_BFu7s_Ui)
//============================================================================


struct  BFu16ll_BFu7s_Ul  {
  __tsu64 v1:16;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu16ll_BFu7s_Ul) C1{ FL:16 Fs:7 FL}



static void Test_BFu16ll_BFu7s_Ul()
{
  {
    init_simple_test("BFu16ll_BFu7s_Ul");
    static STRUCT_IF_C BFu16ll_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_Ul, BFu16ll_BFu7s_Ul)
//============================================================================


struct  BFu16ll_BFu7s_Us  {
  __tsu64 v1:16;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu7s_Us) C1{ FL:16 Fs:7 Fs}



static void Test_BFu16ll_BFu7s_Us()
{
  {
    init_simple_test("BFu16ll_BFu7s_Us");
    static STRUCT_IF_C BFu16ll_BFu7s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu7s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_Us");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_Us, BFu16ll_BFu7s_Us)
//============================================================================


struct  BFu16ll_BFu7s_Vp  {
  __tsu64 v1:16;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu16ll_BFu7s_Vp) C1{ FL:16 Fs:7 Fp}



static void Test_BFu16ll_BFu7s_Vp()
{
  {
    init_simple_test("BFu16ll_BFu7s_Vp");
    static STRUCT_IF_C BFu16ll_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu7s_Vp, BFu16ll_BFu7s_Vp)
//============================================================================


struct  BFu16ll_BFu8c  {
  __tsu64 v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu16ll_BFu8c) C1{ FL:16 Fc:8}



static void Test_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c, BFu16ll_BFu8c)
//============================================================================


struct  BFu16ll_BFu8c_BFu15i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu8c_BFu15i) C1{ FL:16 Fc:8 Fi:15}



static void Test_BFu16ll_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu15i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu15i, BFu16ll_BFu8c_BFu15i)
//============================================================================


struct  BFu16ll_BFu8c_BFu15ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu8c_BFu15ll) C1{ FL:16 Fc:8 FL:15}



static void Test_BFu16ll_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16ll_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu15ll, BFu16ll_BFu8c_BFu15ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu15s  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu8c_BFu15s) C1{ FL:16 Fc:8 Fs:15}



static void Test_BFu16ll_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu15s");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu15s, BFu16ll_BFu8c_BFu15s)
//============================================================================


struct  BFu16ll_BFu8c_BFu16i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_BFu8c_BFu16i) C1{ FL:16 Fc:8 Fi:16}



static void Test_BFu16ll_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu16i, BFu16ll_BFu8c_BFu16i)
//============================================================================


struct  BFu16ll_BFu8c_BFu16ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_BFu8c_BFu16ll) C1{ FL:16 Fc:8 FL:16}



static void Test_BFu16ll_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16ll_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu16ll, BFu16ll_BFu8c_BFu16ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu16s  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu8c_BFu16s) C1{ FL:16 Fc:8 Fs:16}



static void Test_BFu16ll_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu16s, BFu16ll_BFu8c_BFu16s)
//============================================================================


struct  BFu16ll_BFu8c_BFu17i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu8c_BFu17i) C1{ FL:16 Fc:8 Fi:17}



static void Test_BFu16ll_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu17i, BFu16ll_BFu8c_BFu17i)
//============================================================================


struct  BFu16ll_BFu8c_BFu17ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu8c_BFu17ll) C1{ FL:16 Fc:8 FL:17}



static void Test_BFu16ll_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16ll_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu17ll, BFu16ll_BFu8c_BFu17ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu1c  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_BFu8c_BFu1c) C1{ FL:16 Fc:8 Fc:1}



static void Test_BFu16ll_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu1c");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu1c, BFu16ll_BFu8c_BFu1c)
//============================================================================


struct  BFu16ll_BFu8c_BFu1i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_BFu8c_BFu1i) C1{ FL:16 Fc:8 Fi:1}



static void Test_BFu16ll_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu1i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu1i, BFu16ll_BFu8c_BFu1i)
//============================================================================


struct  BFu16ll_BFu8c_BFu1ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_BFu8c_BFu1ll) C1{ FL:16 Fc:8 FL:1}



static void Test_BFu16ll_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu1ll, BFu16ll_BFu8c_BFu1ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu1s  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu8c_BFu1s) C1{ FL:16 Fc:8 Fs:1}



static void Test_BFu16ll_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu1s");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu1s, BFu16ll_BFu8c_BFu1s)
//============================================================================


struct  BFu16ll_BFu8c_BFu31i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu8c_BFu31i) C1{ FL:16 Fc:8 Fi:31}



static void Test_BFu16ll_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu31i, BFu16ll_BFu8c_BFu31i)
//============================================================================


struct  BFu16ll_BFu8c_BFu31ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu8c_BFu31ll) C1{ FL:16 Fc:8 FL:31}



static void Test_BFu16ll_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16ll_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu31ll, BFu16ll_BFu8c_BFu31ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu32i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu8c_BFu32i) C1{ FL:16 Fc:8 Fi:32}



static void Test_BFu16ll_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu32i, BFu16ll_BFu8c_BFu32i)
//============================================================================


struct  BFu16ll_BFu8c_BFu32ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu8c_BFu32ll) C1{ FL:16 Fc:8 FL:32}



static void Test_BFu16ll_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16ll_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu32ll, BFu16ll_BFu8c_BFu32ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu33  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu8c_BFu33) C1{ FL:16 Fc:8 FL:33}



static void Test_BFu16ll_BFu8c_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu33");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16ll_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu33, BFu16ll_BFu8c_BFu33)
//============================================================================


struct  BFu16ll_BFu8c_BFu7c  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_BFu8c_BFu7c) C1{ FL:16 Fc:8 Fc:7}



static void Test_BFu16ll_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu7c");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu7c, BFu16ll_BFu8c_BFu7c)
//============================================================================


struct  BFu16ll_BFu8c_BFu7i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu8c_BFu7i) C1{ FL:16 Fc:8 Fi:7}



static void Test_BFu16ll_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu7i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu7i, BFu16ll_BFu8c_BFu7i)
//============================================================================


struct  BFu16ll_BFu8c_BFu7ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu8c_BFu7ll) C1{ FL:16 Fc:8 FL:7}



static void Test_BFu16ll_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu7ll, BFu16ll_BFu8c_BFu7ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu7s  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu8c_BFu7s) C1{ FL:16 Fc:8 Fs:7}



static void Test_BFu16ll_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu7s");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu7s, BFu16ll_BFu8c_BFu7s)
//============================================================================


struct  BFu16ll_BFu8c_BFu8c  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_BFu8c_BFu8c) C1{ FL:16 Fc:8 Fc:8}



static void Test_BFu16ll_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu8c, BFu16ll_BFu8c_BFu8c)
//============================================================================


struct  BFu16ll_BFu8c_BFu8i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_BFu8c_BFu8i) C1{ FL:16 Fc:8 Fi:8}



static void Test_BFu16ll_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu8i, BFu16ll_BFu8c_BFu8i)
//============================================================================


struct  BFu16ll_BFu8c_BFu8ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu8c_BFu8ll) C1{ FL:16 Fc:8 FL:8}



static void Test_BFu16ll_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu8ll, BFu16ll_BFu8c_BFu8ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu8s  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_BFu8c_BFu8s) C1{ FL:16 Fc:8 Fs:8}



static void Test_BFu16ll_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu8s, BFu16ll_BFu8c_BFu8s)
//============================================================================


struct  BFu16ll_BFu8c_BFu9i  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_BFu8c_BFu9i) C1{ FL:16 Fc:8 Fi:9}



static void Test_BFu16ll_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu9i, BFu16ll_BFu8c_BFu9i)
//============================================================================


struct  BFu16ll_BFu8c_BFu9ll  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu8c_BFu9ll) C1{ FL:16 Fc:8 FL:9}



static void Test_BFu16ll_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16ll_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu9ll, BFu16ll_BFu8c_BFu9ll)
//============================================================================


struct  BFu16ll_BFu8c_BFu9s  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_BFu8c_BFu9s) C1{ FL:16 Fc:8 Fs:9}



static void Test_BFu16ll_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu8c_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu8c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_BFu9s, BFu16ll_BFu8c_BFu9s)
//============================================================================


struct  BFu16ll_BFu8c_C  {
  __tsu64 v1:16;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu16ll_BFu8c_C) C1{ FL:16 Fc:8 Fc}



static void Test_BFu16ll_BFu8c_C()
{
  {
    init_simple_test("BFu16ll_BFu8c_C");
    static STRUCT_IF_C BFu16ll_BFu8c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_C, BFu16ll_BFu8c_C)
//============================================================================


struct  BFu16ll_BFu8c_D  {
  __tsu64 v1:16;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu16ll_BFu8c_D) C1{ FL:16 Fc:8 FL}



static void Test_BFu16ll_BFu8c_D()
{
  {
    init_simple_test("BFu16ll_BFu8c_D");
    static STRUCT_IF_C BFu16ll_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_D, BFu16ll_BFu8c_D)
//============================================================================


struct  BFu16ll_BFu8c_F  {
  __tsu64 v1:16;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu16ll_BFu8c_F) C1{ FL:16 Fc:8 Fi}



static void Test_BFu16ll_BFu8c_F()
{
  {
    init_simple_test("BFu16ll_BFu8c_F");
    static STRUCT_IF_C BFu16ll_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_F, BFu16ll_BFu8c_F)
//============================================================================


struct  BFu16ll_BFu8c_I  {
  __tsu64 v1:16;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu16ll_BFu8c_I) C1{ FL:16 Fc:8 Fi}



static void Test_BFu16ll_BFu8c_I()
{
  {
    init_simple_test("BFu16ll_BFu8c_I");
    static STRUCT_IF_C BFu16ll_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_I, BFu16ll_BFu8c_I)
//============================================================================


struct  BFu16ll_BFu8c_Ip  {
  __tsu64 v1:16;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu16ll_BFu8c_Ip) C1{ FL:16 Fc:8 Fp}



static void Test_BFu16ll_BFu8c_Ip()
{
  {
    init_simple_test("BFu16ll_BFu8c_Ip");
    static STRUCT_IF_C BFu16ll_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_Ip, BFu16ll_BFu8c_Ip)
//============================================================================


struct  BFu16ll_BFu8c_L  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu8c_L) C1{ FL:16 Fc:8 FL}



static void Test_BFu16ll_BFu8c_L()
{
  {
    init_simple_test("BFu16ll_BFu8c_L");
    static STRUCT_IF_C BFu16ll_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_L, BFu16ll_BFu8c_L)
//============================================================================


struct  BFu16ll_BFu8c_S  {
  __tsu64 v1:16;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu16ll_BFu8c_S) C1{ FL:16 Fc:8 Fs}



static void Test_BFu16ll_BFu8c_S()
{
  {
    init_simple_test("BFu16ll_BFu8c_S");
    static STRUCT_IF_C BFu16ll_BFu8c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_S");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_S, BFu16ll_BFu8c_S)
//============================================================================


struct  BFu16ll_BFu8c_Uc  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu16ll_BFu8c_Uc) C1{ FL:16 Fc:8 Fc}



static void Test_BFu16ll_BFu8c_Uc()
{
  {
    init_simple_test("BFu16ll_BFu8c_Uc");
    static STRUCT_IF_C BFu16ll_BFu8c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_Uc, BFu16ll_BFu8c_Uc)
//============================================================================


struct  BFu16ll_BFu8c_Ui  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu16ll_BFu8c_Ui) C1{ FL:16 Fc:8 Fi}



static void Test_BFu16ll_BFu8c_Ui()
{
  {
    init_simple_test("BFu16ll_BFu8c_Ui");
    static STRUCT_IF_C BFu16ll_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_Ui, BFu16ll_BFu8c_Ui)
//============================================================================


struct  BFu16ll_BFu8c_Ul  {
  __tsu64 v1:16;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu16ll_BFu8c_Ul) C1{ FL:16 Fc:8 FL}



static void Test_BFu16ll_BFu8c_Ul()
{
  {
    init_simple_test("BFu16ll_BFu8c_Ul");
    static STRUCT_IF_C BFu16ll_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_Ul, BFu16ll_BFu8c_Ul)
//============================================================================


struct  BFu16ll_BFu8c_Us  {
  __tsu64 v1:16;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu8c_Us) C1{ FL:16 Fc:8 Fs}



static void Test_BFu16ll_BFu8c_Us()
{
  {
    init_simple_test("BFu16ll_BFu8c_Us");
    static STRUCT_IF_C BFu16ll_BFu8c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_Us");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_Us, BFu16ll_BFu8c_Us)
//============================================================================


struct  BFu16ll_BFu8c_Vp  {
  __tsu64 v1:16;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu16ll_BFu8c_Vp) C1{ FL:16 Fc:8 Fp}



static void Test_BFu16ll_BFu8c_Vp()
{
  {
    init_simple_test("BFu16ll_BFu8c_Vp");
    static STRUCT_IF_C BFu16ll_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8c_Vp, BFu16ll_BFu8c_Vp)
//============================================================================


struct  BFu16ll_BFu8i  {
  __tsu64 v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu16ll_BFu8i) C1{ FL:16 Fi:8}



static void Test_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i, BFu16ll_BFu8i)
//============================================================================


struct  BFu16ll_BFu8i_BFu15i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu8i_BFu15i) C1{ FL:16 Fi:8 Fi:15}



static void Test_BFu16ll_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu15i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu15i, BFu16ll_BFu8i_BFu15i)
//============================================================================


struct  BFu16ll_BFu8i_BFu15ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu8i_BFu15ll) C1{ FL:16 Fi:8 FL:15}



static void Test_BFu16ll_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16ll_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu15ll, BFu16ll_BFu8i_BFu15ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu15s  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu8i_BFu15s) C1{ FL:16 Fi:8 Fs:15}



static void Test_BFu16ll_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu15s");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu15s, BFu16ll_BFu8i_BFu15s)
//============================================================================


struct  BFu16ll_BFu8i_BFu16i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_BFu8i_BFu16i) C1{ FL:16 Fi:8 Fi:16}



static void Test_BFu16ll_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu16i, BFu16ll_BFu8i_BFu16i)
//============================================================================


struct  BFu16ll_BFu8i_BFu16ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_BFu8i_BFu16ll) C1{ FL:16 Fi:8 FL:16}



static void Test_BFu16ll_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16ll_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu16ll, BFu16ll_BFu8i_BFu16ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu16s  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu8i_BFu16s) C1{ FL:16 Fi:8 Fs:16}



static void Test_BFu16ll_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu16s, BFu16ll_BFu8i_BFu16s)
//============================================================================


struct  BFu16ll_BFu8i_BFu17i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu8i_BFu17i) C1{ FL:16 Fi:8 Fi:17}



static void Test_BFu16ll_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu17i, BFu16ll_BFu8i_BFu17i)
//============================================================================


struct  BFu16ll_BFu8i_BFu17ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu8i_BFu17ll) C1{ FL:16 Fi:8 FL:17}



static void Test_BFu16ll_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16ll_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu17ll, BFu16ll_BFu8i_BFu17ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu1c  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_BFu8i_BFu1c) C1{ FL:16 Fi:8 Fc:1}



static void Test_BFu16ll_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu1c");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu1c, BFu16ll_BFu8i_BFu1c)
//============================================================================


struct  BFu16ll_BFu8i_BFu1i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_BFu8i_BFu1i) C1{ FL:16 Fi:8 Fi:1}



static void Test_BFu16ll_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu1i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu1i, BFu16ll_BFu8i_BFu1i)
//============================================================================


struct  BFu16ll_BFu8i_BFu1ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_BFu8i_BFu1ll) C1{ FL:16 Fi:8 FL:1}



static void Test_BFu16ll_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu1ll, BFu16ll_BFu8i_BFu1ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu1s  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu8i_BFu1s) C1{ FL:16 Fi:8 Fs:1}



static void Test_BFu16ll_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu1s");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu1s, BFu16ll_BFu8i_BFu1s)
//============================================================================


struct  BFu16ll_BFu8i_BFu31i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu8i_BFu31i) C1{ FL:16 Fi:8 Fi:31}



static void Test_BFu16ll_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu31i, BFu16ll_BFu8i_BFu31i)
//============================================================================


struct  BFu16ll_BFu8i_BFu31ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu8i_BFu31ll) C1{ FL:16 Fi:8 FL:31}



static void Test_BFu16ll_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16ll_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu31ll, BFu16ll_BFu8i_BFu31ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu32i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu8i_BFu32i) C1{ FL:16 Fi:8 Fi:32}



static void Test_BFu16ll_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu32i, BFu16ll_BFu8i_BFu32i)
//============================================================================


struct  BFu16ll_BFu8i_BFu32ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu8i_BFu32ll) C1{ FL:16 Fi:8 FL:32}



static void Test_BFu16ll_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16ll_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu32ll, BFu16ll_BFu8i_BFu32ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu33  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu8i_BFu33) C1{ FL:16 Fi:8 FL:33}



static void Test_BFu16ll_BFu8i_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu33");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16ll_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu33, BFu16ll_BFu8i_BFu33)
//============================================================================


struct  BFu16ll_BFu8i_BFu7c  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_BFu8i_BFu7c) C1{ FL:16 Fi:8 Fc:7}



static void Test_BFu16ll_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu7c");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu7c, BFu16ll_BFu8i_BFu7c)
//============================================================================


struct  BFu16ll_BFu8i_BFu7i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu8i_BFu7i) C1{ FL:16 Fi:8 Fi:7}



static void Test_BFu16ll_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu7i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu7i, BFu16ll_BFu8i_BFu7i)
//============================================================================


struct  BFu16ll_BFu8i_BFu7ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu8i_BFu7ll) C1{ FL:16 Fi:8 FL:7}



static void Test_BFu16ll_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu7ll, BFu16ll_BFu8i_BFu7ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu7s  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu8i_BFu7s) C1{ FL:16 Fi:8 Fs:7}



static void Test_BFu16ll_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu7s");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu7s, BFu16ll_BFu8i_BFu7s)
//============================================================================


struct  BFu16ll_BFu8i_BFu8c  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_BFu8i_BFu8c) C1{ FL:16 Fi:8 Fc:8}



static void Test_BFu16ll_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu8c, BFu16ll_BFu8i_BFu8c)
//============================================================================


struct  BFu16ll_BFu8i_BFu8i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_BFu8i_BFu8i) C1{ FL:16 Fi:8 Fi:8}



static void Test_BFu16ll_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu8i, BFu16ll_BFu8i_BFu8i)
//============================================================================


struct  BFu16ll_BFu8i_BFu8ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu8i_BFu8ll) C1{ FL:16 Fi:8 FL:8}



static void Test_BFu16ll_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu8ll, BFu16ll_BFu8i_BFu8ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu8s  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_BFu8i_BFu8s) C1{ FL:16 Fi:8 Fs:8}



static void Test_BFu16ll_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu8s, BFu16ll_BFu8i_BFu8s)
//============================================================================


struct  BFu16ll_BFu8i_BFu9i  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_BFu8i_BFu9i) C1{ FL:16 Fi:8 Fi:9}



static void Test_BFu16ll_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu9i, BFu16ll_BFu8i_BFu9i)
//============================================================================


struct  BFu16ll_BFu8i_BFu9ll  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu8i_BFu9ll) C1{ FL:16 Fi:8 FL:9}



static void Test_BFu16ll_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16ll_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu9ll, BFu16ll_BFu8i_BFu9ll)
//============================================================================


struct  BFu16ll_BFu8i_BFu9s  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_BFu8i_BFu9s) C1{ FL:16 Fi:8 Fs:9}



static void Test_BFu16ll_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu8i_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu8i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_BFu9s, BFu16ll_BFu8i_BFu9s)
//============================================================================


struct  BFu16ll_BFu8i_C  {
  __tsu64 v1:16;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu16ll_BFu8i_C) C1{ FL:16 Fi:8 Fc}



static void Test_BFu16ll_BFu8i_C()
{
  {
    init_simple_test("BFu16ll_BFu8i_C");
    static STRUCT_IF_C BFu16ll_BFu8i_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_C, BFu16ll_BFu8i_C)
//============================================================================


struct  BFu16ll_BFu8i_D  {
  __tsu64 v1:16;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu16ll_BFu8i_D) C1{ FL:16 Fi:8 FL}



static void Test_BFu16ll_BFu8i_D()
{
  {
    init_simple_test("BFu16ll_BFu8i_D");
    static STRUCT_IF_C BFu16ll_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_D, BFu16ll_BFu8i_D)
//============================================================================


struct  BFu16ll_BFu8i_F  {
  __tsu64 v1:16;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu16ll_BFu8i_F) C1{ FL:16 Fi:8 Fi}



static void Test_BFu16ll_BFu8i_F()
{
  {
    init_simple_test("BFu16ll_BFu8i_F");
    static STRUCT_IF_C BFu16ll_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_F, BFu16ll_BFu8i_F)
//============================================================================


struct  BFu16ll_BFu8i_I  {
  __tsu64 v1:16;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu16ll_BFu8i_I) C1{ FL:16 Fi:8 Fi}



static void Test_BFu16ll_BFu8i_I()
{
  {
    init_simple_test("BFu16ll_BFu8i_I");
    static STRUCT_IF_C BFu16ll_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_I, BFu16ll_BFu8i_I)
//============================================================================


struct  BFu16ll_BFu8i_Ip  {
  __tsu64 v1:16;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu16ll_BFu8i_Ip) C1{ FL:16 Fi:8 Fp}



static void Test_BFu16ll_BFu8i_Ip()
{
  {
    init_simple_test("BFu16ll_BFu8i_Ip");
    static STRUCT_IF_C BFu16ll_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_Ip, BFu16ll_BFu8i_Ip)
//============================================================================


struct  BFu16ll_BFu8i_L  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu8i_L) C1{ FL:16 Fi:8 FL}



static void Test_BFu16ll_BFu8i_L()
{
  {
    init_simple_test("BFu16ll_BFu8i_L");
    static STRUCT_IF_C BFu16ll_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_L, BFu16ll_BFu8i_L)
//============================================================================


struct  BFu16ll_BFu8i_S  {
  __tsu64 v1:16;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu16ll_BFu8i_S) C1{ FL:16 Fi:8 Fs}



static void Test_BFu16ll_BFu8i_S()
{
  {
    init_simple_test("BFu16ll_BFu8i_S");
    static STRUCT_IF_C BFu16ll_BFu8i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_S");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_S, BFu16ll_BFu8i_S)
//============================================================================


struct  BFu16ll_BFu8i_Uc  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu16ll_BFu8i_Uc) C1{ FL:16 Fi:8 Fc}



static void Test_BFu16ll_BFu8i_Uc()
{
  {
    init_simple_test("BFu16ll_BFu8i_Uc");
    static STRUCT_IF_C BFu16ll_BFu8i_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_Uc, BFu16ll_BFu8i_Uc)
//============================================================================


struct  BFu16ll_BFu8i_Ui  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu16ll_BFu8i_Ui) C1{ FL:16 Fi:8 Fi}



static void Test_BFu16ll_BFu8i_Ui()
{
  {
    init_simple_test("BFu16ll_BFu8i_Ui");
    static STRUCT_IF_C BFu16ll_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_Ui, BFu16ll_BFu8i_Ui)
//============================================================================


struct  BFu16ll_BFu8i_Ul  {
  __tsu64 v1:16;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu16ll_BFu8i_Ul) C1{ FL:16 Fi:8 FL}



static void Test_BFu16ll_BFu8i_Ul()
{
  {
    init_simple_test("BFu16ll_BFu8i_Ul");
    static STRUCT_IF_C BFu16ll_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_Ul, BFu16ll_BFu8i_Ul)
//============================================================================


struct  BFu16ll_BFu8i_Us  {
  __tsu64 v1:16;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu8i_Us) C1{ FL:16 Fi:8 Fs}



static void Test_BFu16ll_BFu8i_Us()
{
  {
    init_simple_test("BFu16ll_BFu8i_Us");
    static STRUCT_IF_C BFu16ll_BFu8i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_Us");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_Us, BFu16ll_BFu8i_Us)
//============================================================================


struct  BFu16ll_BFu8i_Vp  {
  __tsu64 v1:16;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu16ll_BFu8i_Vp) C1{ FL:16 Fi:8 Fp}



static void Test_BFu16ll_BFu8i_Vp()
{
  {
    init_simple_test("BFu16ll_BFu8i_Vp");
    static STRUCT_IF_C BFu16ll_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8i_Vp, BFu16ll_BFu8i_Vp)
//============================================================================


struct  BFu16ll_BFu8ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu16ll_BFu8ll) C1{ FL:16 FL:8}



static void Test_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll, BFu16ll_BFu8ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu15i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu8ll_BFu15i) C1{ FL:16 FL:8 Fi:15}



static void Test_BFu16ll_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu15i, BFu16ll_BFu8ll_BFu15i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu15ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu8ll_BFu15ll) C1{ FL:16 FL:8 FL:15}



static void Test_BFu16ll_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16ll_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu15ll, BFu16ll_BFu8ll_BFu15ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu15s  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu8ll_BFu15s) C1{ FL:16 FL:8 Fs:15}



static void Test_BFu16ll_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu15s, BFu16ll_BFu8ll_BFu15s)
//============================================================================


struct  BFu16ll_BFu8ll_BFu16i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_BFu8ll_BFu16i) C1{ FL:16 FL:8 Fi:16}



static void Test_BFu16ll_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu16i, BFu16ll_BFu8ll_BFu16i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu16ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_BFu8ll_BFu16ll) C1{ FL:16 FL:8 FL:16}



static void Test_BFu16ll_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16ll_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu16ll, BFu16ll_BFu8ll_BFu16ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu16s  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu8ll_BFu16s) C1{ FL:16 FL:8 Fs:16}



static void Test_BFu16ll_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu16s, BFu16ll_BFu8ll_BFu16s)
//============================================================================


struct  BFu16ll_BFu8ll_BFu17i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu8ll_BFu17i) C1{ FL:16 FL:8 Fi:17}



static void Test_BFu16ll_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu17i, BFu16ll_BFu8ll_BFu17i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu17ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu8ll_BFu17ll) C1{ FL:16 FL:8 FL:17}



static void Test_BFu16ll_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16ll_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu17ll, BFu16ll_BFu8ll_BFu17ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu1c  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_BFu8ll_BFu1c) C1{ FL:16 FL:8 Fc:1}



static void Test_BFu16ll_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu1c, BFu16ll_BFu8ll_BFu1c)
//============================================================================


struct  BFu16ll_BFu8ll_BFu1i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_BFu8ll_BFu1i) C1{ FL:16 FL:8 Fi:1}



static void Test_BFu16ll_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu1i, BFu16ll_BFu8ll_BFu1i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu1ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_BFu8ll_BFu1ll) C1{ FL:16 FL:8 FL:1}



static void Test_BFu16ll_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu1ll, BFu16ll_BFu8ll_BFu1ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu1s  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu8ll_BFu1s) C1{ FL:16 FL:8 Fs:1}



static void Test_BFu16ll_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu1s, BFu16ll_BFu8ll_BFu1s)
//============================================================================


struct  BFu16ll_BFu8ll_BFu31i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu8ll_BFu31i) C1{ FL:16 FL:8 Fi:31}



static void Test_BFu16ll_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu31i, BFu16ll_BFu8ll_BFu31i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu31ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu8ll_BFu31ll) C1{ FL:16 FL:8 FL:31}



static void Test_BFu16ll_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16ll_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu31ll, BFu16ll_BFu8ll_BFu31ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu32i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu8ll_BFu32i) C1{ FL:16 FL:8 Fi:32}



static void Test_BFu16ll_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu32i, BFu16ll_BFu8ll_BFu32i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu32ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu8ll_BFu32ll) C1{ FL:16 FL:8 FL:32}



static void Test_BFu16ll_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16ll_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu32ll, BFu16ll_BFu8ll_BFu32ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu33  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu8ll_BFu33) C1{ FL:16 FL:8 FL:33}



static void Test_BFu16ll_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu33");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16ll_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu33, BFu16ll_BFu8ll_BFu33)
//============================================================================


struct  BFu16ll_BFu8ll_BFu7c  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_BFu8ll_BFu7c) C1{ FL:16 FL:8 Fc:7}



static void Test_BFu16ll_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu7c, BFu16ll_BFu8ll_BFu7c)
//============================================================================


struct  BFu16ll_BFu8ll_BFu7i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu8ll_BFu7i) C1{ FL:16 FL:8 Fi:7}



static void Test_BFu16ll_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu7i, BFu16ll_BFu8ll_BFu7i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu7ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu8ll_BFu7ll) C1{ FL:16 FL:8 FL:7}



static void Test_BFu16ll_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu7ll, BFu16ll_BFu8ll_BFu7ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu7s  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu8ll_BFu7s) C1{ FL:16 FL:8 Fs:7}



static void Test_BFu16ll_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu7s, BFu16ll_BFu8ll_BFu7s)
//============================================================================


struct  BFu16ll_BFu8ll_BFu8c  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_BFu8ll_BFu8c) C1{ FL:16 FL:8 Fc:8}



static void Test_BFu16ll_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu8c, BFu16ll_BFu8ll_BFu8c)
//============================================================================


struct  BFu16ll_BFu8ll_BFu8i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_BFu8ll_BFu8i) C1{ FL:16 FL:8 Fi:8}



static void Test_BFu16ll_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu8i, BFu16ll_BFu8ll_BFu8i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu8ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu8ll_BFu8ll) C1{ FL:16 FL:8 FL:8}



static void Test_BFu16ll_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu8ll, BFu16ll_BFu8ll_BFu8ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu8s  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_BFu8ll_BFu8s) C1{ FL:16 FL:8 Fs:8}



static void Test_BFu16ll_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu8s, BFu16ll_BFu8ll_BFu8s)
//============================================================================


struct  BFu16ll_BFu8ll_BFu9i  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_BFu8ll_BFu9i) C1{ FL:16 FL:8 Fi:9}



static void Test_BFu16ll_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu9i, BFu16ll_BFu8ll_BFu9i)
//============================================================================


struct  BFu16ll_BFu8ll_BFu9ll  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu8ll_BFu9ll) C1{ FL:16 FL:8 FL:9}



static void Test_BFu16ll_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16ll_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu9ll, BFu16ll_BFu8ll_BFu9ll)
//============================================================================


struct  BFu16ll_BFu8ll_BFu9s  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_BFu8ll_BFu9s) C1{ FL:16 FL:8 Fs:9}



static void Test_BFu16ll_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu8ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_BFu9s, BFu16ll_BFu8ll_BFu9s)
//============================================================================


struct  BFu16ll_BFu8ll_C  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu16ll_BFu8ll_C) C1{ FL:16 FL:8 Fc}



static void Test_BFu16ll_BFu8ll_C()
{
  {
    init_simple_test("BFu16ll_BFu8ll_C");
    static STRUCT_IF_C BFu16ll_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_C, BFu16ll_BFu8ll_C)
//============================================================================


struct  BFu16ll_BFu8ll_D  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu16ll_BFu8ll_D) C1{ FL:16 FL:8 FL}



static void Test_BFu16ll_BFu8ll_D()
{
  {
    init_simple_test("BFu16ll_BFu8ll_D");
    static STRUCT_IF_C BFu16ll_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_D, BFu16ll_BFu8ll_D)
//============================================================================


struct  BFu16ll_BFu8ll_F  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu16ll_BFu8ll_F) C1{ FL:16 FL:8 Fi}



static void Test_BFu16ll_BFu8ll_F()
{
  {
    init_simple_test("BFu16ll_BFu8ll_F");
    static STRUCT_IF_C BFu16ll_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_F, BFu16ll_BFu8ll_F)
//============================================================================


struct  BFu16ll_BFu8ll_I  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu16ll_BFu8ll_I) C1{ FL:16 FL:8 Fi}



static void Test_BFu16ll_BFu8ll_I()
{
  {
    init_simple_test("BFu16ll_BFu8ll_I");
    static STRUCT_IF_C BFu16ll_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_I, BFu16ll_BFu8ll_I)
//============================================================================


struct  BFu16ll_BFu8ll_Ip  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu16ll_BFu8ll_Ip) C1{ FL:16 FL:8 Fp}



static void Test_BFu16ll_BFu8ll_Ip()
{
  {
    init_simple_test("BFu16ll_BFu8ll_Ip");
    static STRUCT_IF_C BFu16ll_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_Ip, BFu16ll_BFu8ll_Ip)
//============================================================================


struct  BFu16ll_BFu8ll_L  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu8ll_L) C1{ FL:16 FL:8 FL}



static void Test_BFu16ll_BFu8ll_L()
{
  {
    init_simple_test("BFu16ll_BFu8ll_L");
    static STRUCT_IF_C BFu16ll_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_L, BFu16ll_BFu8ll_L)
//============================================================================


struct  BFu16ll_BFu8ll_S  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu16ll_BFu8ll_S) C1{ FL:16 FL:8 Fs}



static void Test_BFu16ll_BFu8ll_S()
{
  {
    init_simple_test("BFu16ll_BFu8ll_S");
    static STRUCT_IF_C BFu16ll_BFu8ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_S");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_S, BFu16ll_BFu8ll_S)
//============================================================================


struct  BFu16ll_BFu8ll_Uc  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu16ll_BFu8ll_Uc) C1{ FL:16 FL:8 Fc}



static void Test_BFu16ll_BFu8ll_Uc()
{
  {
    init_simple_test("BFu16ll_BFu8ll_Uc");
    static STRUCT_IF_C BFu16ll_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_Uc, BFu16ll_BFu8ll_Uc)
//============================================================================


struct  BFu16ll_BFu8ll_Ui  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu16ll_BFu8ll_Ui) C1{ FL:16 FL:8 Fi}



static void Test_BFu16ll_BFu8ll_Ui()
{
  {
    init_simple_test("BFu16ll_BFu8ll_Ui");
    static STRUCT_IF_C BFu16ll_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_Ui, BFu16ll_BFu8ll_Ui)
//============================================================================


struct  BFu16ll_BFu8ll_Ul  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu16ll_BFu8ll_Ul) C1{ FL:16 FL:8 FL}



static void Test_BFu16ll_BFu8ll_Ul()
{
  {
    init_simple_test("BFu16ll_BFu8ll_Ul");
    static STRUCT_IF_C BFu16ll_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_Ul, BFu16ll_BFu8ll_Ul)
//============================================================================


struct  BFu16ll_BFu8ll_Us  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu8ll_Us) C1{ FL:16 FL:8 Fs}



static void Test_BFu16ll_BFu8ll_Us()
{
  {
    init_simple_test("BFu16ll_BFu8ll_Us");
    static STRUCT_IF_C BFu16ll_BFu8ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_Us");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_Us, BFu16ll_BFu8ll_Us)
//============================================================================


struct  BFu16ll_BFu8ll_Vp  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu16ll_BFu8ll_Vp) C1{ FL:16 FL:8 Fp}



static void Test_BFu16ll_BFu8ll_Vp()
{
  {
    init_simple_test("BFu16ll_BFu8ll_Vp");
    static STRUCT_IF_C BFu16ll_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8ll_Vp, BFu16ll_BFu8ll_Vp)
//============================================================================


struct  BFu16ll_BFu8s  {
  __tsu64 v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu16ll_BFu8s) C1{ FL:16 Fs:8}



static void Test_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s, BFu16ll_BFu8s)
//============================================================================


struct  BFu16ll_BFu8s_BFu15i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu8s_BFu15i) C1{ FL:16 Fs:8 Fi:15}



static void Test_BFu16ll_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu15i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu15i, BFu16ll_BFu8s_BFu15i)
//============================================================================


struct  BFu16ll_BFu8s_BFu15ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu8s_BFu15ll) C1{ FL:16 Fs:8 FL:15}



static void Test_BFu16ll_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16ll_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu15ll, BFu16ll_BFu8s_BFu15ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu15s  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu8s_BFu15s) C1{ FL:16 Fs:8 Fs:15}



static void Test_BFu16ll_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu15s");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu15s, BFu16ll_BFu8s_BFu15s)
//============================================================================


struct  BFu16ll_BFu8s_BFu16i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_BFu8s_BFu16i) C1{ FL:16 Fs:8 Fi:16}



static void Test_BFu16ll_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu16i, BFu16ll_BFu8s_BFu16i)
//============================================================================


struct  BFu16ll_BFu8s_BFu16ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_BFu8s_BFu16ll) C1{ FL:16 Fs:8 FL:16}



static void Test_BFu16ll_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16ll_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu16ll, BFu16ll_BFu8s_BFu16ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu16s  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu8s_BFu16s) C1{ FL:16 Fs:8 Fs:16}



static void Test_BFu16ll_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu16s, BFu16ll_BFu8s_BFu16s)
//============================================================================


struct  BFu16ll_BFu8s_BFu17i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu8s_BFu17i) C1{ FL:16 Fs:8 Fi:17}



static void Test_BFu16ll_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu17i, BFu16ll_BFu8s_BFu17i)
//============================================================================


struct  BFu16ll_BFu8s_BFu17ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu8s_BFu17ll) C1{ FL:16 Fs:8 FL:17}



static void Test_BFu16ll_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16ll_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu17ll, BFu16ll_BFu8s_BFu17ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu1c  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_BFu8s_BFu1c) C1{ FL:16 Fs:8 Fc:1}



static void Test_BFu16ll_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu1c");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu1c, BFu16ll_BFu8s_BFu1c)
//============================================================================


struct  BFu16ll_BFu8s_BFu1i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_BFu8s_BFu1i) C1{ FL:16 Fs:8 Fi:1}



static void Test_BFu16ll_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu1i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu1i, BFu16ll_BFu8s_BFu1i)
//============================================================================


struct  BFu16ll_BFu8s_BFu1ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_BFu8s_BFu1ll) C1{ FL:16 Fs:8 FL:1}



static void Test_BFu16ll_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu1ll, BFu16ll_BFu8s_BFu1ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu1s  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu8s_BFu1s) C1{ FL:16 Fs:8 Fs:1}



static void Test_BFu16ll_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu1s");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu1s, BFu16ll_BFu8s_BFu1s)
//============================================================================


struct  BFu16ll_BFu8s_BFu31i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu8s_BFu31i) C1{ FL:16 Fs:8 Fi:31}



static void Test_BFu16ll_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu31i, BFu16ll_BFu8s_BFu31i)
//============================================================================


struct  BFu16ll_BFu8s_BFu31ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu8s_BFu31ll) C1{ FL:16 Fs:8 FL:31}



static void Test_BFu16ll_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16ll_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu31ll, BFu16ll_BFu8s_BFu31ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu32i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu8s_BFu32i) C1{ FL:16 Fs:8 Fi:32}



static void Test_BFu16ll_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu32i, BFu16ll_BFu8s_BFu32i)
//============================================================================


struct  BFu16ll_BFu8s_BFu32ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu8s_BFu32ll) C1{ FL:16 Fs:8 FL:32}



static void Test_BFu16ll_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16ll_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu32ll, BFu16ll_BFu8s_BFu32ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu33  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu8s_BFu33) C1{ FL:16 Fs:8 FL:33}



static void Test_BFu16ll_BFu8s_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu33");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16ll_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu33, BFu16ll_BFu8s_BFu33)
//============================================================================


struct  BFu16ll_BFu8s_BFu7c  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_BFu8s_BFu7c) C1{ FL:16 Fs:8 Fc:7}



static void Test_BFu16ll_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu7c");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu7c, BFu16ll_BFu8s_BFu7c)
//============================================================================


struct  BFu16ll_BFu8s_BFu7i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu8s_BFu7i) C1{ FL:16 Fs:8 Fi:7}



static void Test_BFu16ll_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu7i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu7i, BFu16ll_BFu8s_BFu7i)
//============================================================================


struct  BFu16ll_BFu8s_BFu7ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu8s_BFu7ll) C1{ FL:16 Fs:8 FL:7}



static void Test_BFu16ll_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu7ll, BFu16ll_BFu8s_BFu7ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu7s  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu8s_BFu7s) C1{ FL:16 Fs:8 Fs:7}



static void Test_BFu16ll_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu7s");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu7s, BFu16ll_BFu8s_BFu7s)
//============================================================================


struct  BFu16ll_BFu8s_BFu8c  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_BFu8s_BFu8c) C1{ FL:16 Fs:8 Fc:8}



static void Test_BFu16ll_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu8c, BFu16ll_BFu8s_BFu8c)
//============================================================================


struct  BFu16ll_BFu8s_BFu8i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_BFu8s_BFu8i) C1{ FL:16 Fs:8 Fi:8}



static void Test_BFu16ll_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu8i, BFu16ll_BFu8s_BFu8i)
//============================================================================


struct  BFu16ll_BFu8s_BFu8ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu8s_BFu8ll) C1{ FL:16 Fs:8 FL:8}



static void Test_BFu16ll_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu8ll, BFu16ll_BFu8s_BFu8ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu8s  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_BFu8s_BFu8s) C1{ FL:16 Fs:8 Fs:8}



static void Test_BFu16ll_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu8s, BFu16ll_BFu8s_BFu8s)
//============================================================================


struct  BFu16ll_BFu8s_BFu9i  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_BFu8s_BFu9i) C1{ FL:16 Fs:8 Fi:9}



static void Test_BFu16ll_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu9i, BFu16ll_BFu8s_BFu9i)
//============================================================================


struct  BFu16ll_BFu8s_BFu9ll  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu8s_BFu9ll) C1{ FL:16 Fs:8 FL:9}



static void Test_BFu16ll_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16ll_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu9ll, BFu16ll_BFu8s_BFu9ll)
//============================================================================


struct  BFu16ll_BFu8s_BFu9s  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_BFu8s_BFu9s) C1{ FL:16 Fs:8 Fs:9}



static void Test_BFu16ll_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu8s_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu8s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_BFu9s, BFu16ll_BFu8s_BFu9s)
//============================================================================


struct  BFu16ll_BFu8s_C  {
  __tsu64 v1:16;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu16ll_BFu8s_C) C1{ FL:16 Fs:8 Fc}



static void Test_BFu16ll_BFu8s_C()
{
  {
    init_simple_test("BFu16ll_BFu8s_C");
    static STRUCT_IF_C BFu16ll_BFu8s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_C");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_C, BFu16ll_BFu8s_C)
//============================================================================


struct  BFu16ll_BFu8s_D  {
  __tsu64 v1:16;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu16ll_BFu8s_D) C1{ FL:16 Fs:8 FL}



static void Test_BFu16ll_BFu8s_D()
{
  {
    init_simple_test("BFu16ll_BFu8s_D");
    static STRUCT_IF_C BFu16ll_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_D, BFu16ll_BFu8s_D)
//============================================================================


struct  BFu16ll_BFu8s_F  {
  __tsu64 v1:16;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu16ll_BFu8s_F) C1{ FL:16 Fs:8 Fi}



static void Test_BFu16ll_BFu8s_F()
{
  {
    init_simple_test("BFu16ll_BFu8s_F");
    static STRUCT_IF_C BFu16ll_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_F, BFu16ll_BFu8s_F)
//============================================================================


struct  BFu16ll_BFu8s_I  {
  __tsu64 v1:16;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu16ll_BFu8s_I) C1{ FL:16 Fs:8 Fi}



static void Test_BFu16ll_BFu8s_I()
{
  {
    init_simple_test("BFu16ll_BFu8s_I");
    static STRUCT_IF_C BFu16ll_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_I, BFu16ll_BFu8s_I)
//============================================================================


struct  BFu16ll_BFu8s_Ip  {
  __tsu64 v1:16;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu16ll_BFu8s_Ip) C1{ FL:16 Fs:8 Fp}



static void Test_BFu16ll_BFu8s_Ip()
{
  {
    init_simple_test("BFu16ll_BFu8s_Ip");
    static STRUCT_IF_C BFu16ll_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_Ip, BFu16ll_BFu8s_Ip)
//============================================================================


struct  BFu16ll_BFu8s_L  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu8s_L) C1{ FL:16 Fs:8 FL}



static void Test_BFu16ll_BFu8s_L()
{
  {
    init_simple_test("BFu16ll_BFu8s_L");
    static STRUCT_IF_C BFu16ll_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_L, BFu16ll_BFu8s_L)
//============================================================================


struct  BFu16ll_BFu8s_S  {
  __tsu64 v1:16;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu16ll_BFu8s_S) C1{ FL:16 Fs:8 Fs}



static void Test_BFu16ll_BFu8s_S()
{
  {
    init_simple_test("BFu16ll_BFu8s_S");
    static STRUCT_IF_C BFu16ll_BFu8s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_S");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_S, BFu16ll_BFu8s_S)
//============================================================================


struct  BFu16ll_BFu8s_Uc  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu16ll_BFu8s_Uc) C1{ FL:16 Fs:8 Fc}



static void Test_BFu16ll_BFu8s_Uc()
{
  {
    init_simple_test("BFu16ll_BFu8s_Uc");
    static STRUCT_IF_C BFu16ll_BFu8s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_Uc");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_Uc, BFu16ll_BFu8s_Uc)
//============================================================================


struct  BFu16ll_BFu8s_Ui  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu16ll_BFu8s_Ui) C1{ FL:16 Fs:8 Fi}



static void Test_BFu16ll_BFu8s_Ui()
{
  {
    init_simple_test("BFu16ll_BFu8s_Ui");
    static STRUCT_IF_C BFu16ll_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_Ui, BFu16ll_BFu8s_Ui)
//============================================================================


struct  BFu16ll_BFu8s_Ul  {
  __tsu64 v1:16;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu16ll_BFu8s_Ul) C1{ FL:16 Fs:8 FL}



static void Test_BFu16ll_BFu8s_Ul()
{
  {
    init_simple_test("BFu16ll_BFu8s_Ul");
    static STRUCT_IF_C BFu16ll_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_Ul, BFu16ll_BFu8s_Ul)
//============================================================================


struct  BFu16ll_BFu8s_Us  {
  __tsu64 v1:16;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu8s_Us) C1{ FL:16 Fs:8 Fs}



static void Test_BFu16ll_BFu8s_Us()
{
  {
    init_simple_test("BFu16ll_BFu8s_Us");
    static STRUCT_IF_C BFu16ll_BFu8s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu8s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_Us");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_Us, BFu16ll_BFu8s_Us)
//============================================================================


struct  BFu16ll_BFu8s_Vp  {
  __tsu64 v1:16;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu16ll_BFu8s_Vp) C1{ FL:16 Fs:8 Fp}



static void Test_BFu16ll_BFu8s_Vp()
{
  {
    init_simple_test("BFu16ll_BFu8s_Vp");
    static STRUCT_IF_C BFu16ll_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu8s_Vp, BFu16ll_BFu8s_Vp)
//============================================================================


struct  BFu16ll_BFu9i  {
  __tsu64 v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu16ll_BFu9i) C1{ FL:16 Fi:9}



static void Test_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i, BFu16ll_BFu9i)
//============================================================================


struct  BFu16ll_BFu9i_BFu15i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu9i_BFu15i) C1{ FL:16 Fi:9 Fi:15}



static void Test_BFu16ll_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu15i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu15i, BFu16ll_BFu9i_BFu15i)
//============================================================================


struct  BFu16ll_BFu9i_BFu15ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu9i_BFu15ll) C1{ FL:16 Fi:9 FL:15}



static void Test_BFu16ll_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu16ll_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu16ll_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu15ll, BFu16ll_BFu9i_BFu15ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu15s  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu9i_BFu15s) C1{ FL:16 Fi:9 Fs:15}



static void Test_BFu16ll_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu15s");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu15s, BFu16ll_BFu9i_BFu15s)
//============================================================================


struct  BFu16ll_BFu9i_BFu16i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_BFu9i_BFu16i) C1{ FL:16 Fi:9 Fi:16}



static void Test_BFu16ll_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu16i, BFu16ll_BFu9i_BFu16i)
//============================================================================


struct  BFu16ll_BFu9i_BFu16ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_BFu9i_BFu16ll) C1{ FL:16 Fi:9 FL:16}



static void Test_BFu16ll_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu16ll_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu16ll, BFu16ll_BFu9i_BFu16ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu16s  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu9i_BFu16s) C1{ FL:16 Fi:9 Fs:16}



static void Test_BFu16ll_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu16s, BFu16ll_BFu9i_BFu16s)
//============================================================================


struct  BFu16ll_BFu9i_BFu17i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu9i_BFu17i) C1{ FL:16 Fi:9 Fi:17}



static void Test_BFu16ll_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu17i, BFu16ll_BFu9i_BFu17i)
//============================================================================


struct  BFu16ll_BFu9i_BFu17ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu9i_BFu17ll) C1{ FL:16 Fi:9 FL:17}



static void Test_BFu16ll_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu16ll_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu16ll_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu17ll, BFu16ll_BFu9i_BFu17ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu1c  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_BFu9i_BFu1c) C1{ FL:16 Fi:9 Fc:1}



static void Test_BFu16ll_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu1c");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu1c, BFu16ll_BFu9i_BFu1c)
//============================================================================


struct  BFu16ll_BFu9i_BFu1i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_BFu9i_BFu1i) C1{ FL:16 Fi:9 Fi:1}



static void Test_BFu16ll_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu1i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu1i, BFu16ll_BFu9i_BFu1i)
//============================================================================


struct  BFu16ll_BFu9i_BFu1ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_BFu9i_BFu1ll) C1{ FL:16 Fi:9 FL:1}



static void Test_BFu16ll_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu1ll, BFu16ll_BFu9i_BFu1ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu1s  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu9i_BFu1s) C1{ FL:16 Fi:9 Fs:1}



static void Test_BFu16ll_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu1s");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu1s, BFu16ll_BFu9i_BFu1s)
//============================================================================


struct  BFu16ll_BFu9i_BFu31i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu9i_BFu31i) C1{ FL:16 Fi:9 Fi:31}



static void Test_BFu16ll_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu31i, BFu16ll_BFu9i_BFu31i)
//============================================================================


struct  BFu16ll_BFu9i_BFu31ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu9i_BFu31ll) C1{ FL:16 Fi:9 FL:31}



static void Test_BFu16ll_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu16ll_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu16ll_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu31ll, BFu16ll_BFu9i_BFu31ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu32i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu9i_BFu32i) C1{ FL:16 Fi:9 Fi:32}



static void Test_BFu16ll_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu32i, BFu16ll_BFu9i_BFu32i)
//============================================================================


struct  BFu16ll_BFu9i_BFu32ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu9i_BFu32ll) C1{ FL:16 Fi:9 FL:32}



static void Test_BFu16ll_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu16ll_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu16ll_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu32ll, BFu16ll_BFu9i_BFu32ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu33  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu9i_BFu33) C1{ FL:16 Fi:9 FL:33}



static void Test_BFu16ll_BFu9i_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu33");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu16ll_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu16ll_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu33, BFu16ll_BFu9i_BFu33)
//============================================================================


struct  BFu16ll_BFu9i_BFu7c  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_BFu9i_BFu7c) C1{ FL:16 Fi:9 Fc:7}



static void Test_BFu16ll_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu7c");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu7c, BFu16ll_BFu9i_BFu7c)
//============================================================================


struct  BFu16ll_BFu9i_BFu7i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu9i_BFu7i) C1{ FL:16 Fi:9 Fi:7}



static void Test_BFu16ll_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu7i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu7i, BFu16ll_BFu9i_BFu7i)
//============================================================================


struct  BFu16ll_BFu9i_BFu7ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu9i_BFu7ll) C1{ FL:16 Fi:9 FL:7}



static void Test_BFu16ll_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu7ll, BFu16ll_BFu9i_BFu7ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu7s  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu9i_BFu7s) C1{ FL:16 Fi:9 Fs:7}



static void Test_BFu16ll_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu7s");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu7s, BFu16ll_BFu9i_BFu7s)
//============================================================================


struct  BFu16ll_BFu9i_BFu8c  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_BFu9i_BFu8c) C1{ FL:16 Fi:9 Fc:8}



static void Test_BFu16ll_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu8c, BFu16ll_BFu9i_BFu8c)
//============================================================================


struct  BFu16ll_BFu9i_BFu8i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_BFu9i_BFu8i) C1{ FL:16 Fi:9 Fi:8}



static void Test_BFu16ll_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu8i, BFu16ll_BFu9i_BFu8i)
//============================================================================


struct  BFu16ll_BFu9i_BFu8ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu9i_BFu8ll) C1{ FL:16 Fi:9 FL:8}



static void Test_BFu16ll_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu16ll_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu16ll_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu8ll, BFu16ll_BFu9i_BFu8ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu8s  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_BFu9i_BFu8s) C1{ FL:16 Fi:9 Fs:8}



static void Test_BFu16ll_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu8s, BFu16ll_BFu9i_BFu8s)
//============================================================================


struct  BFu16ll_BFu9i_BFu9i  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_BFu9i_BFu9i) C1{ FL:16 Fi:9 Fi:9}



static void Test_BFu16ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu9i, BFu16ll_BFu9i_BFu9i)
//============================================================================


struct  BFu16ll_BFu9i_BFu9ll  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu9i_BFu9ll) C1{ FL:16 Fi:9 FL:9}



static void Test_BFu16ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu16ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu9ll, BFu16ll_BFu9i_BFu9ll)
//============================================================================


struct  BFu16ll_BFu9i_BFu9s  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_BFu9i_BFu9s) C1{ FL:16 Fi:9 Fs:9}



static void Test_BFu16ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_BFu9s, BFu16ll_BFu9i_BFu9s)
//============================================================================


struct  BFu16ll_BFu9i_C  {
  __tsu64 v1:16;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu16ll_BFu9i_C) C1{ FL:16 Fi:9 Fc}



static void Test_BFu16ll_BFu9i_C()
{
  {
    init_simple_test("BFu16ll_BFu9i_C");
    static STRUCT_IF_C BFu16ll_BFu9i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_C");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_C");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_C, BFu16ll_BFu9i_C)
//============================================================================


struct  BFu16ll_BFu9i_D  {
  __tsu64 v1:16;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu16ll_BFu9i_D) C1{ FL:16 Fi:9 FL}



static void Test_BFu16ll_BFu9i_D()
{
  {
    init_simple_test("BFu16ll_BFu9i_D");
    static STRUCT_IF_C BFu16ll_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_D");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_D, BFu16ll_BFu9i_D)
//============================================================================


struct  BFu16ll_BFu9i_F  {
  __tsu64 v1:16;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu16ll_BFu9i_F) C1{ FL:16 Fi:9 Fi}



static void Test_BFu16ll_BFu9i_F()
{
  {
    init_simple_test("BFu16ll_BFu9i_F");
    static STRUCT_IF_C BFu16ll_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_F");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_F, BFu16ll_BFu9i_F)
//============================================================================


struct  BFu16ll_BFu9i_I  {
  __tsu64 v1:16;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu16ll_BFu9i_I) C1{ FL:16 Fi:9 Fi}



static void Test_BFu16ll_BFu9i_I()
{
  {
    init_simple_test("BFu16ll_BFu9i_I");
    static STRUCT_IF_C BFu16ll_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_I");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_I, BFu16ll_BFu9i_I)
//============================================================================


struct  BFu16ll_BFu9i_Ip  {
  __tsu64 v1:16;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu16ll_BFu9i_Ip) C1{ FL:16 Fi:9 Fp}



static void Test_BFu16ll_BFu9i_Ip()
{
  {
    init_simple_test("BFu16ll_BFu9i_Ip");
    static STRUCT_IF_C BFu16ll_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_Ip, BFu16ll_BFu9i_Ip)
//============================================================================


struct  BFu16ll_BFu9i_L  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu9i_L) C1{ FL:16 Fi:9 FL}



static void Test_BFu16ll_BFu9i_L()
{
  {
    init_simple_test("BFu16ll_BFu9i_L");
    static STRUCT_IF_C BFu16ll_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_L");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_L, BFu16ll_BFu9i_L)
//============================================================================


struct  BFu16ll_BFu9i_S  {
  __tsu64 v1:16;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu16ll_BFu9i_S) C1{ FL:16 Fi:9 Fs}



static void Test_BFu16ll_BFu9i_S()
{
  {
    init_simple_test("BFu16ll_BFu9i_S");
    static STRUCT_IF_C BFu16ll_BFu9i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_S");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_S");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_S, BFu16ll_BFu9i_S)
//============================================================================


struct  BFu16ll_BFu9i_Uc  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu16ll_BFu9i_Uc) C1{ FL:16 Fi:9 Fc}



static void Test_BFu16ll_BFu9i_Uc()
{
  {
    init_simple_test("BFu16ll_BFu9i_Uc");
    static STRUCT_IF_C BFu16ll_BFu9i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_Uc");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_Uc, BFu16ll_BFu9i_Uc)
//============================================================================


struct  BFu16ll_BFu9i_Ui  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu16ll_BFu9i_Ui) C1{ FL:16 Fi:9 Fi}



static void Test_BFu16ll_BFu9i_Ui()
{
  {
    init_simple_test("BFu16ll_BFu9i_Ui");
    static STRUCT_IF_C BFu16ll_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_Ui, BFu16ll_BFu9i_Ui)
//============================================================================


struct  BFu16ll_BFu9i_Ul  {
  __tsu64 v1:16;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu16ll_BFu9i_Ul) C1{ FL:16 Fi:9 FL}



static void Test_BFu16ll_BFu9i_Ul()
{
  {
    init_simple_test("BFu16ll_BFu9i_Ul");
    static STRUCT_IF_C BFu16ll_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_Ul, BFu16ll_BFu9i_Ul)
//============================================================================


struct  BFu16ll_BFu9i_Us  {
  __tsu64 v1:16;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu9i_Us) C1{ FL:16 Fi:9 Fs}



static void Test_BFu16ll_BFu9i_Us()
{
  {
    init_simple_test("BFu16ll_BFu9i_Us");
    static STRUCT_IF_C BFu16ll_BFu9i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_Us");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_Us, BFu16ll_BFu9i_Us)
//============================================================================


struct  BFu16ll_BFu9i_Vp  {
  __tsu64 v1:16;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu16ll_BFu9i_Vp) C1{ FL:16 Fi:9 Fp}



static void Test_BFu16ll_BFu9i_Vp()
{
  {
    init_simple_test("BFu16ll_BFu9i_Vp");
    static STRUCT_IF_C BFu16ll_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9i_Vp, BFu16ll_BFu9i_Vp)
//============================================================================


struct  BFu16ll_BFu9ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu16ll_BFu9ll) C1{ FL:16 FL:9}



static void Test_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll, BFu16ll_BFu9ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu15i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu9ll_BFu15i) C1{ FL:16 FL:9 Fi:15}



static void Test_BFu16ll_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu15i, BFu16ll_BFu9ll_BFu15i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu15ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu9ll_BFu15ll) C1{ FL:16 FL:9 FL:15}



static void Test_BFu16ll_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu16ll_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu16ll_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu15ll, BFu16ll_BFu9ll_BFu15ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu15s  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu9ll_BFu15s) C1{ FL:16 FL:9 Fs:15}



static void Test_BFu16ll_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu15s, BFu16ll_BFu9ll_BFu15s)
//============================================================================


struct  BFu16ll_BFu9ll_BFu16i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_BFu9ll_BFu16i) C1{ FL:16 FL:9 Fi:16}



static void Test_BFu16ll_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu16i, BFu16ll_BFu9ll_BFu16i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu16ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_BFu9ll_BFu16ll) C1{ FL:16 FL:9 FL:16}



static void Test_BFu16ll_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu16ll_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu16ll, BFu16ll_BFu9ll_BFu16ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu16s  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu9ll_BFu16s) C1{ FL:16 FL:9 Fs:16}



static void Test_BFu16ll_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu16s, BFu16ll_BFu9ll_BFu16s)
//============================================================================


struct  BFu16ll_BFu9ll_BFu17i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu9ll_BFu17i) C1{ FL:16 FL:9 Fi:17}



static void Test_BFu16ll_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu17i, BFu16ll_BFu9ll_BFu17i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu17ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu9ll_BFu17ll) C1{ FL:16 FL:9 FL:17}



static void Test_BFu16ll_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu16ll_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu16ll_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu17ll, BFu16ll_BFu9ll_BFu17ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu1c  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_BFu9ll_BFu1c) C1{ FL:16 FL:9 Fc:1}



static void Test_BFu16ll_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu1c, BFu16ll_BFu9ll_BFu1c)
//============================================================================


struct  BFu16ll_BFu9ll_BFu1i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_BFu9ll_BFu1i) C1{ FL:16 FL:9 Fi:1}



static void Test_BFu16ll_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu1i, BFu16ll_BFu9ll_BFu1i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu1ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_BFu9ll_BFu1ll) C1{ FL:16 FL:9 FL:1}



static void Test_BFu16ll_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu1ll, BFu16ll_BFu9ll_BFu1ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu1s  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu9ll_BFu1s) C1{ FL:16 FL:9 Fs:1}



static void Test_BFu16ll_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu1s, BFu16ll_BFu9ll_BFu1s)
//============================================================================


struct  BFu16ll_BFu9ll_BFu31i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu9ll_BFu31i) C1{ FL:16 FL:9 Fi:31}



static void Test_BFu16ll_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu31i, BFu16ll_BFu9ll_BFu31i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu31ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu9ll_BFu31ll) C1{ FL:16 FL:9 FL:31}



static void Test_BFu16ll_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu16ll_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu16ll_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu31ll, BFu16ll_BFu9ll_BFu31ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu32i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu9ll_BFu32i) C1{ FL:16 FL:9 Fi:32}



static void Test_BFu16ll_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu32i, BFu16ll_BFu9ll_BFu32i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu32ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu9ll_BFu32ll) C1{ FL:16 FL:9 FL:32}



static void Test_BFu16ll_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu16ll_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu16ll_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu32ll, BFu16ll_BFu9ll_BFu32ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu33  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu9ll_BFu33) C1{ FL:16 FL:9 FL:33}



static void Test_BFu16ll_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu33");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu16ll_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu16ll_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu33, BFu16ll_BFu9ll_BFu33)
//============================================================================


struct  BFu16ll_BFu9ll_BFu7c  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_BFu9ll_BFu7c) C1{ FL:16 FL:9 Fc:7}



static void Test_BFu16ll_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu7c, BFu16ll_BFu9ll_BFu7c)
//============================================================================


struct  BFu16ll_BFu9ll_BFu7i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu9ll_BFu7i) C1{ FL:16 FL:9 Fi:7}



static void Test_BFu16ll_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu7i, BFu16ll_BFu9ll_BFu7i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu7ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu9ll_BFu7ll) C1{ FL:16 FL:9 FL:7}



static void Test_BFu16ll_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu7ll, BFu16ll_BFu9ll_BFu7ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu7s  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu9ll_BFu7s) C1{ FL:16 FL:9 Fs:7}



static void Test_BFu16ll_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu7s, BFu16ll_BFu9ll_BFu7s)
//============================================================================


struct  BFu16ll_BFu9ll_BFu8c  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_BFu9ll_BFu8c) C1{ FL:16 FL:9 Fc:8}



static void Test_BFu16ll_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu8c, BFu16ll_BFu9ll_BFu8c)
//============================================================================


struct  BFu16ll_BFu9ll_BFu8i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_BFu9ll_BFu8i) C1{ FL:16 FL:9 Fi:8}



static void Test_BFu16ll_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu8i, BFu16ll_BFu9ll_BFu8i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu8ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu9ll_BFu8ll) C1{ FL:16 FL:9 FL:8}



static void Test_BFu16ll_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu16ll_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu16ll_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu8ll, BFu16ll_BFu9ll_BFu8ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu8s  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_BFu9ll_BFu8s) C1{ FL:16 FL:9 Fs:8}



static void Test_BFu16ll_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu8s, BFu16ll_BFu9ll_BFu8s)
//============================================================================


struct  BFu16ll_BFu9ll_BFu9i  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_BFu9ll_BFu9i) C1{ FL:16 FL:9 Fi:9}



static void Test_BFu16ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu9i, BFu16ll_BFu9ll_BFu9i)
//============================================================================


struct  BFu16ll_BFu9ll_BFu9ll  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu9ll_BFu9ll) C1{ FL:16 FL:9 FL:9}



static void Test_BFu16ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu16ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu9ll, BFu16ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFu16ll_BFu9ll_BFu9s  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_BFu9ll_BFu9s) C1{ FL:16 FL:9 Fs:9}



static void Test_BFu16ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_BFu9s, BFu16ll_BFu9ll_BFu9s)
//============================================================================


struct  BFu16ll_BFu9ll_C  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu16ll_BFu9ll_C) C1{ FL:16 FL:9 Fc}



static void Test_BFu16ll_BFu9ll_C()
{
  {
    init_simple_test("BFu16ll_BFu9ll_C");
    static STRUCT_IF_C BFu16ll_BFu9ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_C");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_C");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_C, BFu16ll_BFu9ll_C)
//============================================================================


struct  BFu16ll_BFu9ll_D  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu16ll_BFu9ll_D) C1{ FL:16 FL:9 FL}



static void Test_BFu16ll_BFu9ll_D()
{
  {
    init_simple_test("BFu16ll_BFu9ll_D");
    static STRUCT_IF_C BFu16ll_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_D");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_D, BFu16ll_BFu9ll_D)
//============================================================================


struct  BFu16ll_BFu9ll_F  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu16ll_BFu9ll_F) C1{ FL:16 FL:9 Fi}



static void Test_BFu16ll_BFu9ll_F()
{
  {
    init_simple_test("BFu16ll_BFu9ll_F");
    static STRUCT_IF_C BFu16ll_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_F");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_F, BFu16ll_BFu9ll_F)
//============================================================================


struct  BFu16ll_BFu9ll_I  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu16ll_BFu9ll_I) C1{ FL:16 FL:9 Fi}



static void Test_BFu16ll_BFu9ll_I()
{
  {
    init_simple_test("BFu16ll_BFu9ll_I");
    static STRUCT_IF_C BFu16ll_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_I");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_I, BFu16ll_BFu9ll_I)
//============================================================================


struct  BFu16ll_BFu9ll_Ip  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu16ll_BFu9ll_Ip) C1{ FL:16 FL:9 Fp}



static void Test_BFu16ll_BFu9ll_Ip()
{
  {
    init_simple_test("BFu16ll_BFu9ll_Ip");
    static STRUCT_IF_C BFu16ll_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_Ip, BFu16ll_BFu9ll_Ip)
//============================================================================


struct  BFu16ll_BFu9ll_L  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu9ll_L) C1{ FL:16 FL:9 FL}



static void Test_BFu16ll_BFu9ll_L()
{
  {
    init_simple_test("BFu16ll_BFu9ll_L");
    static STRUCT_IF_C BFu16ll_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_L");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_L, BFu16ll_BFu9ll_L)
//============================================================================


struct  BFu16ll_BFu9ll_S  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu16ll_BFu9ll_S) C1{ FL:16 FL:9 Fs}



static void Test_BFu16ll_BFu9ll_S()
{
  {
    init_simple_test("BFu16ll_BFu9ll_S");
    static STRUCT_IF_C BFu16ll_BFu9ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_S");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_S");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_S, BFu16ll_BFu9ll_S)
//============================================================================


struct  BFu16ll_BFu9ll_Uc  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu16ll_BFu9ll_Uc) C1{ FL:16 FL:9 Fc}



static void Test_BFu16ll_BFu9ll_Uc()
{
  {
    init_simple_test("BFu16ll_BFu9ll_Uc");
    static STRUCT_IF_C BFu16ll_BFu9ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_Uc");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_Uc, BFu16ll_BFu9ll_Uc)
//============================================================================


struct  BFu16ll_BFu9ll_Ui  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu16ll_BFu9ll_Ui) C1{ FL:16 FL:9 Fi}



static void Test_BFu16ll_BFu9ll_Ui()
{
  {
    init_simple_test("BFu16ll_BFu9ll_Ui");
    static STRUCT_IF_C BFu16ll_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_Ui, BFu16ll_BFu9ll_Ui)
//============================================================================


struct  BFu16ll_BFu9ll_Ul  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu16ll_BFu9ll_Ul) C1{ FL:16 FL:9 FL}



static void Test_BFu16ll_BFu9ll_Ul()
{
  {
    init_simple_test("BFu16ll_BFu9ll_Ul");
    static STRUCT_IF_C BFu16ll_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_Ul, BFu16ll_BFu9ll_Ul)
//============================================================================


struct  BFu16ll_BFu9ll_Us  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu9ll_Us) C1{ FL:16 FL:9 Fs}



static void Test_BFu16ll_BFu9ll_Us()
{
  {
    init_simple_test("BFu16ll_BFu9ll_Us");
    static STRUCT_IF_C BFu16ll_BFu9ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_Us");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_Us, BFu16ll_BFu9ll_Us)
//============================================================================


struct  BFu16ll_BFu9ll_Vp  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu16ll_BFu9ll_Vp) C1{ FL:16 FL:9 Fp}



static void Test_BFu16ll_BFu9ll_Vp()
{
  {
    init_simple_test("BFu16ll_BFu9ll_Vp");
    static STRUCT_IF_C BFu16ll_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9ll_Vp, BFu16ll_BFu9ll_Vp)
//============================================================================


struct  BFu16ll_BFu9s  {
  __tsu64 v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu16ll_BFu9s) C1{ FL:16 Fs:9}



static void Test_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s, BFu16ll_BFu9s)
//============================================================================


struct  BFu16ll_BFu9s_BFu15i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_BFu9s_BFu15i) C1{ FL:16 Fs:9 Fi:15}



static void Test_BFu16ll_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu15i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu15i, BFu16ll_BFu9s_BFu15i)
//============================================================================


struct  BFu16ll_BFu9s_BFu15ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_BFu9s_BFu15ll) C1{ FL:16 Fs:9 FL:15}



static void Test_BFu16ll_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu16ll_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu16ll_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu15ll, BFu16ll_BFu9s_BFu15ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu15s  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_BFu9s_BFu15s) C1{ FL:16 Fs:9 Fs:15}



static void Test_BFu16ll_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu15s");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu15s, BFu16ll_BFu9s_BFu15s)
//============================================================================


struct  BFu16ll_BFu9s_BFu16i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_BFu9s_BFu16i) C1{ FL:16 Fs:9 Fi:16}



static void Test_BFu16ll_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu16i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu16i, BFu16ll_BFu9s_BFu16i)
//============================================================================


struct  BFu16ll_BFu9s_BFu16ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_BFu9s_BFu16ll) C1{ FL:16 Fs:9 FL:16}



static void Test_BFu16ll_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu16ll_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu16ll, BFu16ll_BFu9s_BFu16ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu16s  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_BFu9s_BFu16s) C1{ FL:16 Fs:9 Fs:16}



static void Test_BFu16ll_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu16s");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu16s, BFu16ll_BFu9s_BFu16s)
//============================================================================


struct  BFu16ll_BFu9s_BFu17i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_BFu9s_BFu17i) C1{ FL:16 Fs:9 Fi:17}



static void Test_BFu16ll_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu17i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu17i, BFu16ll_BFu9s_BFu17i)
//============================================================================


struct  BFu16ll_BFu9s_BFu17ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_BFu9s_BFu17ll) C1{ FL:16 Fs:9 FL:17}



static void Test_BFu16ll_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu16ll_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu16ll_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu17ll, BFu16ll_BFu9s_BFu17ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu1c  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_BFu9s_BFu1c) C1{ FL:16 Fs:9 Fc:1}



static void Test_BFu16ll_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu1c");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu1c, BFu16ll_BFu9s_BFu1c)
//============================================================================


struct  BFu16ll_BFu9s_BFu1i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_BFu9s_BFu1i) C1{ FL:16 Fs:9 Fi:1}



static void Test_BFu16ll_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu1i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu1i, BFu16ll_BFu9s_BFu1i)
//============================================================================


struct  BFu16ll_BFu9s_BFu1ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_BFu9s_BFu1ll) C1{ FL:16 Fs:9 FL:1}



static void Test_BFu16ll_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu1ll, BFu16ll_BFu9s_BFu1ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu1s  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_BFu9s_BFu1s) C1{ FL:16 Fs:9 Fs:1}



static void Test_BFu16ll_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu1s");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16ll_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu1s, BFu16ll_BFu9s_BFu1s)
//============================================================================


struct  BFu16ll_BFu9s_BFu31i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_BFu9s_BFu31i) C1{ FL:16 Fs:9 Fi:31}



static void Test_BFu16ll_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu31i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu31i, BFu16ll_BFu9s_BFu31i)
//============================================================================


struct  BFu16ll_BFu9s_BFu31ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_BFu9s_BFu31ll) C1{ FL:16 Fs:9 FL:31}



static void Test_BFu16ll_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu16ll_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu16ll_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu31ll, BFu16ll_BFu9s_BFu31ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu32i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_BFu9s_BFu32i) C1{ FL:16 Fs:9 Fi:32}



static void Test_BFu16ll_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu32i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu32i, BFu16ll_BFu9s_BFu32i)
//============================================================================


struct  BFu16ll_BFu9s_BFu32ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_BFu9s_BFu32ll) C1{ FL:16 Fs:9 FL:32}



static void Test_BFu16ll_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu16ll_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu16ll_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu32ll, BFu16ll_BFu9s_BFu32ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu33  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_BFu9s_BFu33) C1{ FL:16 Fs:9 FL:33}



static void Test_BFu16ll_BFu9s_BFu33()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu33");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu16ll_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu16ll_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu33, BFu16ll_BFu9s_BFu33)
//============================================================================


struct  BFu16ll_BFu9s_BFu7c  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_BFu9s_BFu7c) C1{ FL:16 Fs:9 Fc:7}



static void Test_BFu16ll_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu7c");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu7c, BFu16ll_BFu9s_BFu7c)
//============================================================================


struct  BFu16ll_BFu9s_BFu7i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_BFu9s_BFu7i) C1{ FL:16 Fs:9 Fi:7}



static void Test_BFu16ll_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu7i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu7i, BFu16ll_BFu9s_BFu7i)
//============================================================================


struct  BFu16ll_BFu9s_BFu7ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_BFu9s_BFu7ll) C1{ FL:16 Fs:9 FL:7}



static void Test_BFu16ll_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu7ll, BFu16ll_BFu9s_BFu7ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu7s  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_BFu9s_BFu7s) C1{ FL:16 Fs:9 Fs:7}



static void Test_BFu16ll_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu7s");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu9s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16ll_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16ll_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu7s, BFu16ll_BFu9s_BFu7s)
//============================================================================


struct  BFu16ll_BFu9s_BFu8c  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_BFu9s_BFu8c) C1{ FL:16 Fs:9 Fc:8}



static void Test_BFu16ll_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu8c");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu8c, BFu16ll_BFu9s_BFu8c)
//============================================================================


struct  BFu16ll_BFu9s_BFu8i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_BFu9s_BFu8i) C1{ FL:16 Fs:9 Fi:8}



static void Test_BFu16ll_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu8i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu8i, BFu16ll_BFu9s_BFu8i)
//============================================================================


struct  BFu16ll_BFu9s_BFu8ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_BFu9s_BFu8ll) C1{ FL:16 Fs:9 FL:8}



static void Test_BFu16ll_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu16ll_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu16ll_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu8ll, BFu16ll_BFu9s_BFu8ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu8s  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_BFu9s_BFu8s) C1{ FL:16 Fs:9 Fs:8}



static void Test_BFu16ll_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu8s");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu8s, BFu16ll_BFu9s_BFu8s)
//============================================================================


struct  BFu16ll_BFu9s_BFu9i  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_BFu9s_BFu9i) C1{ FL:16 Fs:9 Fi:9}



static void Test_BFu16ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu9i, BFu16ll_BFu9s_BFu9i)
//============================================================================


struct  BFu16ll_BFu9s_BFu9ll  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_BFu9s_BFu9ll) C1{ FL:16 Fs:9 FL:9}



static void Test_BFu16ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu16ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu9ll, BFu16ll_BFu9s_BFu9ll)
//============================================================================


struct  BFu16ll_BFu9s_BFu9s  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_BFu9s_BFu9s) C1{ FL:16 Fs:9 Fs:9}



static void Test_BFu16ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu16ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFu16ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_BFu9s, BFu16ll_BFu9s_BFu9s)
//============================================================================


struct  BFu16ll_BFu9s_C  {
  __tsu64 v1:16;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu16ll_BFu9s_C) C1{ FL:16 Fs:9 Fc}



static void Test_BFu16ll_BFu9s_C()
{
  {
    init_simple_test("BFu16ll_BFu9s_C");
    static STRUCT_IF_C BFu16ll_BFu9s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_C");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_C, BFu16ll_BFu9s_C)
//============================================================================


struct  BFu16ll_BFu9s_D  {
  __tsu64 v1:16;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu16ll_BFu9s_D) C1{ FL:16 Fs:9 FL}



static void Test_BFu16ll_BFu9s_D()
{
  {
    init_simple_test("BFu16ll_BFu9s_D");
    static STRUCT_IF_C BFu16ll_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_D, BFu16ll_BFu9s_D)
//============================================================================


struct  BFu16ll_BFu9s_F  {
  __tsu64 v1:16;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu16ll_BFu9s_F) C1{ FL:16 Fs:9 Fi}



static void Test_BFu16ll_BFu9s_F()
{
  {
    init_simple_test("BFu16ll_BFu9s_F");
    static STRUCT_IF_C BFu16ll_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_F, BFu16ll_BFu9s_F)
//============================================================================


struct  BFu16ll_BFu9s_I  {
  __tsu64 v1:16;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu16ll_BFu9s_I) C1{ FL:16 Fs:9 Fi}



static void Test_BFu16ll_BFu9s_I()
{
  {
    init_simple_test("BFu16ll_BFu9s_I");
    static STRUCT_IF_C BFu16ll_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_I, BFu16ll_BFu9s_I)
//============================================================================


struct  BFu16ll_BFu9s_Ip  {
  __tsu64 v1:16;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu16ll_BFu9s_Ip) C1{ FL:16 Fs:9 Fp}



static void Test_BFu16ll_BFu9s_Ip()
{
  {
    init_simple_test("BFu16ll_BFu9s_Ip");
    static STRUCT_IF_C BFu16ll_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_Ip, BFu16ll_BFu9s_Ip)
//============================================================================


struct  BFu16ll_BFu9s_L  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu16ll_BFu9s_L) C1{ FL:16 Fs:9 FL}



static void Test_BFu16ll_BFu9s_L()
{
  {
    init_simple_test("BFu16ll_BFu9s_L");
    static STRUCT_IF_C BFu16ll_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_L, BFu16ll_BFu9s_L)
//============================================================================


struct  BFu16ll_BFu9s_S  {
  __tsu64 v1:16;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu16ll_BFu9s_S) C1{ FL:16 Fs:9 Fs}



static void Test_BFu16ll_BFu9s_S()
{
  {
    init_simple_test("BFu16ll_BFu9s_S");
    static STRUCT_IF_C BFu16ll_BFu9s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_S");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_S, BFu16ll_BFu9s_S)
//============================================================================


struct  BFu16ll_BFu9s_Uc  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu16ll_BFu9s_Uc) C1{ FL:16 Fs:9 Fc}



static void Test_BFu16ll_BFu9s_Uc()
{
  {
    init_simple_test("BFu16ll_BFu9s_Uc");
    static STRUCT_IF_C BFu16ll_BFu9s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_Uc");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_Uc, BFu16ll_BFu9s_Uc)
//============================================================================


struct  BFu16ll_BFu9s_Ui  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu16ll_BFu9s_Ui) C1{ FL:16 Fs:9 Fi}



static void Test_BFu16ll_BFu9s_Ui()
{
  {
    init_simple_test("BFu16ll_BFu9s_Ui");
    static STRUCT_IF_C BFu16ll_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_Ui, BFu16ll_BFu9s_Ui)
//============================================================================


struct  BFu16ll_BFu9s_Ul  {
  __tsu64 v1:16;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu16ll_BFu9s_Ul) C1{ FL:16 Fs:9 FL}



static void Test_BFu16ll_BFu9s_Ul()
{
  {
    init_simple_test("BFu16ll_BFu9s_Ul");
    static STRUCT_IF_C BFu16ll_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_Ul, BFu16ll_BFu9s_Ul)
//============================================================================


struct  BFu16ll_BFu9s_Us  {
  __tsu64 v1:16;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu16ll_BFu9s_Us) C1{ FL:16 Fs:9 Fs}



static void Test_BFu16ll_BFu9s_Us()
{
  {
    init_simple_test("BFu16ll_BFu9s_Us");
    static STRUCT_IF_C BFu16ll_BFu9s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_Us");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_Us, BFu16ll_BFu9s_Us)
//============================================================================


struct  BFu16ll_BFu9s_Vp  {
  __tsu64 v1:16;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu16ll_BFu9s_Vp) C1{ FL:16 Fs:9 Fp}



static void Test_BFu16ll_BFu9s_Vp()
{
  {
    init_simple_test("BFu16ll_BFu9s_Vp");
    static STRUCT_IF_C BFu16ll_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_BFu9s_Vp, BFu16ll_BFu9s_Vp)
//============================================================================


struct  BFu16ll_C  {
  __tsu64 v1:16;
  char v2;
};
//SIG(1 BFu16ll_C) C1{ FL:16 Fc}



static void Test_BFu16ll_C()
{
  {
    init_simple_test("BFu16ll_C");
    static STRUCT_IF_C BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C");
    check_field_offset(lv, v2, 2, "BFu16ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C, BFu16ll_C)
//============================================================================


struct  BFu16ll_C_BFu15i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_C_BFu15i) C1{ FL:16 Fc Fi:15}



static void Test_BFu16ll_C_BFu15i()
{
  {
    init_simple_test("BFu16ll_C_BFu15i");
    static STRUCT_IF_C BFu16ll_C_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_C_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu15i, BFu16ll_C_BFu15i)
//============================================================================


struct  BFu16ll_C_BFu15ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_C_BFu15ll) C1{ FL:16 Fc FL:15}



static void Test_BFu16ll_C_BFu15ll()
{
  {
    init_simple_test("BFu16ll_C_BFu15ll");
    static STRUCT_IF_C BFu16ll_C_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16ll_C_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16ll_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu15ll, BFu16ll_C_BFu15ll)
//============================================================================


struct  BFu16ll_C_BFu15s  {
  __tsu64 v1:16;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_C_BFu15s) C1{ FL:16 Fc Fs:15}



static void Test_BFu16ll_C_BFu15s()
{
  {
    init_simple_test("BFu16ll_C_BFu15s");
    static STRUCT_IF_C BFu16ll_C_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_C_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu15s, BFu16ll_C_BFu15s)
//============================================================================


struct  BFu16ll_C_BFu16i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_C_BFu16i) C1{ FL:16 Fc Fi:16}



static void Test_BFu16ll_C_BFu16i()
{
  {
    init_simple_test("BFu16ll_C_BFu16i");
    static STRUCT_IF_C BFu16ll_C_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_C_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu16i, BFu16ll_C_BFu16i)
//============================================================================


struct  BFu16ll_C_BFu16ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_C_BFu16ll) C1{ FL:16 Fc FL:16}



static void Test_BFu16ll_C_BFu16ll()
{
  {
    init_simple_test("BFu16ll_C_BFu16ll");
    static STRUCT_IF_C BFu16ll_C_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16ll_C_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu16ll, BFu16ll_C_BFu16ll)
//============================================================================


struct  BFu16ll_C_BFu16s  {
  __tsu64 v1:16;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_C_BFu16s) C1{ FL:16 Fc Fs:16}



static void Test_BFu16ll_C_BFu16s()
{
  {
    init_simple_test("BFu16ll_C_BFu16s");
    static STRUCT_IF_C BFu16ll_C_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_C_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu16s, BFu16ll_C_BFu16s)
//============================================================================


struct  BFu16ll_C_BFu17i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_C_BFu17i) C1{ FL:16 Fc Fi:17}



static void Test_BFu16ll_C_BFu17i()
{
  {
    init_simple_test("BFu16ll_C_BFu17i");
    static STRUCT_IF_C BFu16ll_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu17i, BFu16ll_C_BFu17i)
//============================================================================


struct  BFu16ll_C_BFu17ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_C_BFu17ll) C1{ FL:16 Fc FL:17}



static void Test_BFu16ll_C_BFu17ll()
{
  {
    init_simple_test("BFu16ll_C_BFu17ll");
    static STRUCT_IF_C BFu16ll_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16ll_C_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16ll_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu17ll, BFu16ll_C_BFu17ll)
//============================================================================


struct  BFu16ll_C_BFu1c  {
  __tsu64 v1:16;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_C_BFu1c) C1{ FL:16 Fc Fc:1}



static void Test_BFu16ll_C_BFu1c()
{
  {
    init_simple_test("BFu16ll_C_BFu1c");
    static STRUCT_IF_C BFu16ll_C_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu1c, BFu16ll_C_BFu1c)
//============================================================================


struct  BFu16ll_C_BFu1i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_C_BFu1i) C1{ FL:16 Fc Fi:1}



static void Test_BFu16ll_C_BFu1i()
{
  {
    init_simple_test("BFu16ll_C_BFu1i");
    static STRUCT_IF_C BFu16ll_C_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu1i, BFu16ll_C_BFu1i)
//============================================================================


struct  BFu16ll_C_BFu1ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_C_BFu1ll) C1{ FL:16 Fc FL:1}



static void Test_BFu16ll_C_BFu1ll()
{
  {
    init_simple_test("BFu16ll_C_BFu1ll");
    static STRUCT_IF_C BFu16ll_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu1ll, BFu16ll_C_BFu1ll)
//============================================================================


struct  BFu16ll_C_BFu1s  {
  __tsu64 v1:16;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_C_BFu1s) C1{ FL:16 Fc Fs:1}



static void Test_BFu16ll_C_BFu1s()
{
  {
    init_simple_test("BFu16ll_C_BFu1s");
    static STRUCT_IF_C BFu16ll_C_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu1s, BFu16ll_C_BFu1s)
//============================================================================


struct  BFu16ll_C_BFu31i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_C_BFu31i) C1{ FL:16 Fc Fi:31}



static void Test_BFu16ll_C_BFu31i()
{
  {
    init_simple_test("BFu16ll_C_BFu31i");
    static STRUCT_IF_C BFu16ll_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu31i, BFu16ll_C_BFu31i)
//============================================================================


struct  BFu16ll_C_BFu31ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_C_BFu31ll) C1{ FL:16 Fc FL:31}



static void Test_BFu16ll_C_BFu31ll()
{
  {
    init_simple_test("BFu16ll_C_BFu31ll");
    static STRUCT_IF_C BFu16ll_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16ll_C_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16ll_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu31ll, BFu16ll_C_BFu31ll)
//============================================================================


struct  BFu16ll_C_BFu32i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_C_BFu32i) C1{ FL:16 Fc Fi:32}



static void Test_BFu16ll_C_BFu32i()
{
  {
    init_simple_test("BFu16ll_C_BFu32i");
    static STRUCT_IF_C BFu16ll_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu32i, BFu16ll_C_BFu32i)
//============================================================================


struct  BFu16ll_C_BFu32ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_C_BFu32ll) C1{ FL:16 Fc FL:32}



static void Test_BFu16ll_C_BFu32ll()
{
  {
    init_simple_test("BFu16ll_C_BFu32ll");
    static STRUCT_IF_C BFu16ll_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16ll_C_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16ll_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu32ll, BFu16ll_C_BFu32ll)
//============================================================================


struct  BFu16ll_C_BFu33  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_C_BFu33) C1{ FL:16 Fc FL:33}



static void Test_BFu16ll_C_BFu33()
{
  {
    init_simple_test("BFu16ll_C_BFu33");
    static STRUCT_IF_C BFu16ll_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu33");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16ll_C_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16ll_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu33, BFu16ll_C_BFu33)
//============================================================================


struct  BFu16ll_C_BFu7c  {
  __tsu64 v1:16;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_C_BFu7c) C1{ FL:16 Fc Fc:7}



static void Test_BFu16ll_C_BFu7c()
{
  {
    init_simple_test("BFu16ll_C_BFu7c");
    static STRUCT_IF_C BFu16ll_C_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_C_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu7c, BFu16ll_C_BFu7c)
//============================================================================


struct  BFu16ll_C_BFu7i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_C_BFu7i) C1{ FL:16 Fc Fi:7}



static void Test_BFu16ll_C_BFu7i()
{
  {
    init_simple_test("BFu16ll_C_BFu7i");
    static STRUCT_IF_C BFu16ll_C_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_C_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu7i, BFu16ll_C_BFu7i)
//============================================================================


struct  BFu16ll_C_BFu7ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_C_BFu7ll) C1{ FL:16 Fc FL:7}



static void Test_BFu16ll_C_BFu7ll()
{
  {
    init_simple_test("BFu16ll_C_BFu7ll");
    static STRUCT_IF_C BFu16ll_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_C_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu7ll, BFu16ll_C_BFu7ll)
//============================================================================


struct  BFu16ll_C_BFu7s  {
  __tsu64 v1:16;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_C_BFu7s) C1{ FL:16 Fc Fs:7}



static void Test_BFu16ll_C_BFu7s()
{
  {
    init_simple_test("BFu16ll_C_BFu7s");
    static STRUCT_IF_C BFu16ll_C_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_C_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu7s, BFu16ll_C_BFu7s)
//============================================================================


struct  BFu16ll_C_BFu8c  {
  __tsu64 v1:16;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_C_BFu8c) C1{ FL:16 Fc Fc:8}



static void Test_BFu16ll_C_BFu8c()
{
  {
    init_simple_test("BFu16ll_C_BFu8c");
    static STRUCT_IF_C BFu16ll_C_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_C_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu8c, BFu16ll_C_BFu8c)
//============================================================================


struct  BFu16ll_C_BFu8i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_C_BFu8i) C1{ FL:16 Fc Fi:8}



static void Test_BFu16ll_C_BFu8i()
{
  {
    init_simple_test("BFu16ll_C_BFu8i");
    static STRUCT_IF_C BFu16ll_C_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_C_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu8i, BFu16ll_C_BFu8i)
//============================================================================


struct  BFu16ll_C_BFu8ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_C_BFu8ll) C1{ FL:16 Fc FL:8}



static void Test_BFu16ll_C_BFu8ll()
{
  {
    init_simple_test("BFu16ll_C_BFu8ll");
    static STRUCT_IF_C BFu16ll_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_C_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu8ll, BFu16ll_C_BFu8ll)
//============================================================================


struct  BFu16ll_C_BFu8s  {
  __tsu64 v1:16;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_C_BFu8s) C1{ FL:16 Fc Fs:8}



static void Test_BFu16ll_C_BFu8s()
{
  {
    init_simple_test("BFu16ll_C_BFu8s");
    static STRUCT_IF_C BFu16ll_C_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_C_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu8s, BFu16ll_C_BFu8s)
//============================================================================


struct  BFu16ll_C_BFu9i  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_C_BFu9i) C1{ FL:16 Fc Fi:9}



static void Test_BFu16ll_C_BFu9i()
{
  {
    init_simple_test("BFu16ll_C_BFu9i");
    static STRUCT_IF_C BFu16ll_C_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_C_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu9i, BFu16ll_C_BFu9i)
//============================================================================


struct  BFu16ll_C_BFu9ll  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_C_BFu9ll) C1{ FL:16 Fc FL:9}



static void Test_BFu16ll_C_BFu9ll()
{
  {
    init_simple_test("BFu16ll_C_BFu9ll");
    static STRUCT_IF_C BFu16ll_C_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16ll_C_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16ll_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu9ll, BFu16ll_C_BFu9ll)
//============================================================================


struct  BFu16ll_C_BFu9s  {
  __tsu64 v1:16;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_C_BFu9s) C1{ FL:16 Fc Fs:9}



static void Test_BFu16ll_C_BFu9s()
{
  {
    init_simple_test("BFu16ll_C_BFu9s");
    static STRUCT_IF_C BFu16ll_C_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16ll_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_C_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_BFu9s, BFu16ll_C_BFu9s)
//============================================================================


struct  BFu16ll_C_C  {
  __tsu64 v1:16;
  char v2;
  char v3;
};
//SIG(1 BFu16ll_C_C) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_C_C()
{
  {
    init_simple_test("BFu16ll_C_C");
    static STRUCT_IF_C BFu16ll_C_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_C");
    check_field_offset(lv, v2, 2, "BFu16ll_C_C.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_C, BFu16ll_C_C)
//============================================================================


struct  BFu16ll_C_D  {
  __tsu64 v1:16;
  char v2;
  double v3;
};
//SIG(1 BFu16ll_C_D) C1{ FL:16 Fc FL}



static void Test_BFu16ll_C_D()
{
  {
    init_simple_test("BFu16ll_C_D");
    static STRUCT_IF_C BFu16ll_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_D");
    check_field_offset(lv, v2, 2, "BFu16ll_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_D, BFu16ll_C_D)
//============================================================================


struct  BFu16ll_C_F  {
  __tsu64 v1:16;
  char v2;
  float v3;
};
//SIG(1 BFu16ll_C_F) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_C_F()
{
  {
    init_simple_test("BFu16ll_C_F");
    static STRUCT_IF_C BFu16ll_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_F");
    check_field_offset(lv, v2, 2, "BFu16ll_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_F, BFu16ll_C_F)
//============================================================================


struct  BFu16ll_C_I  {
  __tsu64 v1:16;
  char v2;
  int v3;
};
//SIG(1 BFu16ll_C_I) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_C_I()
{
  {
    init_simple_test("BFu16ll_C_I");
    static STRUCT_IF_C BFu16ll_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_I");
    check_field_offset(lv, v2, 2, "BFu16ll_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_I, BFu16ll_C_I)
//============================================================================


struct  BFu16ll_C_Ip  {
  __tsu64 v1:16;
  char v2;
  int *v3;
};
//SIG(1 BFu16ll_C_Ip) C1{ FL:16 Fc Fp}



static void Test_BFu16ll_C_Ip()
{
  {
    init_simple_test("BFu16ll_C_Ip");
    static STRUCT_IF_C BFu16ll_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_Ip");
    check_field_offset(lv, v2, 2, "BFu16ll_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_Ip, BFu16ll_C_Ip)
//============================================================================


struct  BFu16ll_C_L  {
  __tsu64 v1:16;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_C_L) C1{ FL:16 Fc FL}



static void Test_BFu16ll_C_L()
{
  {
    init_simple_test("BFu16ll_C_L");
    static STRUCT_IF_C BFu16ll_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_L");
    check_field_offset(lv, v2, 2, "BFu16ll_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_L, BFu16ll_C_L)
//============================================================================


struct  BFu16ll_C_S  {
  __tsu64 v1:16;
  char v2;
  short v3;
};
//SIG(1 BFu16ll_C_S) C1{ FL:16 Fc Fs}



static void Test_BFu16ll_C_S()
{
  {
    init_simple_test("BFu16ll_C_S");
    static STRUCT_IF_C BFu16ll_C_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_S");
    check_field_offset(lv, v2, 2, "BFu16ll_C_S.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_S, BFu16ll_C_S)
//============================================================================


struct  BFu16ll_C_Uc  {
  __tsu64 v1:16;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_C_Uc) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_C_Uc()
{
  {
    init_simple_test("BFu16ll_C_Uc");
    static STRUCT_IF_C BFu16ll_C_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_Uc");
    check_field_offset(lv, v2, 2, "BFu16ll_C_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_Uc, BFu16ll_C_Uc)
//============================================================================


struct  BFu16ll_C_Ui  {
  __tsu64 v1:16;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_C_Ui) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_C_Ui()
{
  {
    init_simple_test("BFu16ll_C_Ui");
    static STRUCT_IF_C BFu16ll_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_Ui");
    check_field_offset(lv, v2, 2, "BFu16ll_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_Ui, BFu16ll_C_Ui)
//============================================================================


struct  BFu16ll_C_Ul  {
  __tsu64 v1:16;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_C_Ul) C1{ FL:16 Fc FL}



static void Test_BFu16ll_C_Ul()
{
  {
    init_simple_test("BFu16ll_C_Ul");
    static STRUCT_IF_C BFu16ll_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_Ul");
    check_field_offset(lv, v2, 2, "BFu16ll_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_Ul, BFu16ll_C_Ul)
//============================================================================


struct  BFu16ll_C_Us  {
  __tsu64 v1:16;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_C_Us) C1{ FL:16 Fc Fs}



static void Test_BFu16ll_C_Us()
{
  {
    init_simple_test("BFu16ll_C_Us");
    static STRUCT_IF_C BFu16ll_C_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_C_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_Us");
    check_field_offset(lv, v2, 2, "BFu16ll_C_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_Us, BFu16ll_C_Us)
//============================================================================


struct  BFu16ll_C_Vp  {
  __tsu64 v1:16;
  char v2;
  void *v3;
};
//SIG(1 BFu16ll_C_Vp) C1{ FL:16 Fc Fp}



static void Test_BFu16ll_C_Vp()
{
  {
    init_simple_test("BFu16ll_C_Vp");
    static STRUCT_IF_C BFu16ll_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_Vp");
    check_field_offset(lv, v2, 2, "BFu16ll_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_C_Vp, BFu16ll_C_Vp)
//============================================================================


struct  BFu16ll_D  {
  __tsu64 v1:16;
  double v2;
};
//SIG(1 BFu16ll_D) C1{ FL:16 FL}



static void Test_BFu16ll_D()
{
  {
    init_simple_test("BFu16ll_D");
    static STRUCT_IF_C BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D, BFu16ll_D)
//============================================================================


struct  BFu16ll_D_BFu15i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_D_BFu15i) C1{ FL:16 FL Fi:15}



static void Test_BFu16ll_D_BFu15i()
{
  {
    init_simple_test("BFu16ll_D_BFu15i");
    static STRUCT_IF_C BFu16ll_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu15i, BFu16ll_D_BFu15i)
//============================================================================


struct  BFu16ll_D_BFu15ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_D_BFu15ll) C1{ FL:16 FL FL:15}



static void Test_BFu16ll_D_BFu15ll()
{
  {
    init_simple_test("BFu16ll_D_BFu15ll");
    static STRUCT_IF_C BFu16ll_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu15ll, BFu16ll_D_BFu15ll)
//============================================================================


struct  BFu16ll_D_BFu15s  {
  __tsu64 v1:16;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_D_BFu15s) C1{ FL:16 FL Fs:15}



static void Test_BFu16ll_D_BFu15s()
{
  {
    init_simple_test("BFu16ll_D_BFu15s");
    static STRUCT_IF_C BFu16ll_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu15s, BFu16ll_D_BFu15s)
//============================================================================


struct  BFu16ll_D_BFu16i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_D_BFu16i) C1{ FL:16 FL Fi:16}



static void Test_BFu16ll_D_BFu16i()
{
  {
    init_simple_test("BFu16ll_D_BFu16i");
    static STRUCT_IF_C BFu16ll_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu16i, BFu16ll_D_BFu16i)
//============================================================================


struct  BFu16ll_D_BFu16ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_D_BFu16ll) C1{ FL:16 FL FL:16}



static void Test_BFu16ll_D_BFu16ll()
{
  {
    init_simple_test("BFu16ll_D_BFu16ll");
    static STRUCT_IF_C BFu16ll_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu16ll, BFu16ll_D_BFu16ll)
//============================================================================


struct  BFu16ll_D_BFu16s  {
  __tsu64 v1:16;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_D_BFu16s) C1{ FL:16 FL Fs:16}



static void Test_BFu16ll_D_BFu16s()
{
  {
    init_simple_test("BFu16ll_D_BFu16s");
    static STRUCT_IF_C BFu16ll_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu16s, BFu16ll_D_BFu16s)
//============================================================================


struct  BFu16ll_D_BFu17i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_D_BFu17i) C1{ FL:16 FL Fi:17}



static void Test_BFu16ll_D_BFu17i()
{
  {
    init_simple_test("BFu16ll_D_BFu17i");
    static STRUCT_IF_C BFu16ll_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16ll_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16ll_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu17i, BFu16ll_D_BFu17i)
//============================================================================


struct  BFu16ll_D_BFu17ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_D_BFu17ll) C1{ FL:16 FL FL:17}



static void Test_BFu16ll_D_BFu17ll()
{
  {
    init_simple_test("BFu16ll_D_BFu17ll");
    static STRUCT_IF_C BFu16ll_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16ll_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16ll_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu17ll, BFu16ll_D_BFu17ll)
//============================================================================


struct  BFu16ll_D_BFu1c  {
  __tsu64 v1:16;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_D_BFu1c) C1{ FL:16 FL Fc:1}



static void Test_BFu16ll_D_BFu1c()
{
  {
    init_simple_test("BFu16ll_D_BFu1c");
    static STRUCT_IF_C BFu16ll_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu1c, BFu16ll_D_BFu1c)
//============================================================================


struct  BFu16ll_D_BFu1i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_D_BFu1i) C1{ FL:16 FL Fi:1}



static void Test_BFu16ll_D_BFu1i()
{
  {
    init_simple_test("BFu16ll_D_BFu1i");
    static STRUCT_IF_C BFu16ll_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu1i, BFu16ll_D_BFu1i)
//============================================================================


struct  BFu16ll_D_BFu1ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_D_BFu1ll) C1{ FL:16 FL FL:1}



static void Test_BFu16ll_D_BFu1ll()
{
  {
    init_simple_test("BFu16ll_D_BFu1ll");
    static STRUCT_IF_C BFu16ll_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu1ll, BFu16ll_D_BFu1ll)
//============================================================================


struct  BFu16ll_D_BFu1s  {
  __tsu64 v1:16;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_D_BFu1s) C1{ FL:16 FL Fs:1}



static void Test_BFu16ll_D_BFu1s()
{
  {
    init_simple_test("BFu16ll_D_BFu1s");
    static STRUCT_IF_C BFu16ll_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu1s, BFu16ll_D_BFu1s)
//============================================================================


struct  BFu16ll_D_BFu31i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_D_BFu31i) C1{ FL:16 FL Fi:31}



static void Test_BFu16ll_D_BFu31i()
{
  {
    init_simple_test("BFu16ll_D_BFu31i");
    static STRUCT_IF_C BFu16ll_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16ll_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16ll_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu31i, BFu16ll_D_BFu31i)
//============================================================================


struct  BFu16ll_D_BFu31ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_D_BFu31ll) C1{ FL:16 FL FL:31}



static void Test_BFu16ll_D_BFu31ll()
{
  {
    init_simple_test("BFu16ll_D_BFu31ll");
    static STRUCT_IF_C BFu16ll_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16ll_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16ll_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu31ll, BFu16ll_D_BFu31ll)
//============================================================================


struct  BFu16ll_D_BFu32i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_D_BFu32i) C1{ FL:16 FL Fi:32}



static void Test_BFu16ll_D_BFu32i()
{
  {
    init_simple_test("BFu16ll_D_BFu32i");
    static STRUCT_IF_C BFu16ll_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16ll_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16ll_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu32i, BFu16ll_D_BFu32i)
//============================================================================


struct  BFu16ll_D_BFu32ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_D_BFu32ll) C1{ FL:16 FL FL:32}



static void Test_BFu16ll_D_BFu32ll()
{
  {
    init_simple_test("BFu16ll_D_BFu32ll");
    static STRUCT_IF_C BFu16ll_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16ll_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16ll_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu32ll, BFu16ll_D_BFu32ll)
//============================================================================


struct  BFu16ll_D_BFu33  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_D_BFu33) C1{ FL:16 FL FL:33}



static void Test_BFu16ll_D_BFu33()
{
  {
    init_simple_test("BFu16ll_D_BFu33");
    static STRUCT_IF_C BFu16ll_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu16ll_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu16ll_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu33, BFu16ll_D_BFu33)
//============================================================================


struct  BFu16ll_D_BFu7c  {
  __tsu64 v1:16;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_D_BFu7c) C1{ FL:16 FL Fc:7}



static void Test_BFu16ll_D_BFu7c()
{
  {
    init_simple_test("BFu16ll_D_BFu7c");
    static STRUCT_IF_C BFu16ll_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu7c, BFu16ll_D_BFu7c)
//============================================================================


struct  BFu16ll_D_BFu7i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_D_BFu7i) C1{ FL:16 FL Fi:7}



static void Test_BFu16ll_D_BFu7i()
{
  {
    init_simple_test("BFu16ll_D_BFu7i");
    static STRUCT_IF_C BFu16ll_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu7i, BFu16ll_D_BFu7i)
//============================================================================


struct  BFu16ll_D_BFu7ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_D_BFu7ll) C1{ FL:16 FL FL:7}



static void Test_BFu16ll_D_BFu7ll()
{
  {
    init_simple_test("BFu16ll_D_BFu7ll");
    static STRUCT_IF_C BFu16ll_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu7ll, BFu16ll_D_BFu7ll)
//============================================================================


struct  BFu16ll_D_BFu7s  {
  __tsu64 v1:16;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_D_BFu7s) C1{ FL:16 FL Fs:7}



static void Test_BFu16ll_D_BFu7s()
{
  {
    init_simple_test("BFu16ll_D_BFu7s");
    static STRUCT_IF_C BFu16ll_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu7s, BFu16ll_D_BFu7s)
//============================================================================


struct  BFu16ll_D_BFu8c  {
  __tsu64 v1:16;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_D_BFu8c) C1{ FL:16 FL Fc:8}



static void Test_BFu16ll_D_BFu8c()
{
  {
    init_simple_test("BFu16ll_D_BFu8c");
    static STRUCT_IF_C BFu16ll_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu8c, BFu16ll_D_BFu8c)
//============================================================================


struct  BFu16ll_D_BFu8i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_D_BFu8i) C1{ FL:16 FL Fi:8}



static void Test_BFu16ll_D_BFu8i()
{
  {
    init_simple_test("BFu16ll_D_BFu8i");
    static STRUCT_IF_C BFu16ll_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu8i, BFu16ll_D_BFu8i)
//============================================================================


struct  BFu16ll_D_BFu8ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_D_BFu8ll) C1{ FL:16 FL FL:8}



static void Test_BFu16ll_D_BFu8ll()
{
  {
    init_simple_test("BFu16ll_D_BFu8ll");
    static STRUCT_IF_C BFu16ll_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu8ll, BFu16ll_D_BFu8ll)
//============================================================================


struct  BFu16ll_D_BFu8s  {
  __tsu64 v1:16;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_D_BFu8s) C1{ FL:16 FL Fs:8}



static void Test_BFu16ll_D_BFu8s()
{
  {
    init_simple_test("BFu16ll_D_BFu8s");
    static STRUCT_IF_C BFu16ll_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu8s, BFu16ll_D_BFu8s)
//============================================================================


struct  BFu16ll_D_BFu9i  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_D_BFu9i) C1{ FL:16 FL Fi:9}



static void Test_BFu16ll_D_BFu9i()
{
  {
    init_simple_test("BFu16ll_D_BFu9i");
    static STRUCT_IF_C BFu16ll_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu9i, BFu16ll_D_BFu9i)
//============================================================================


struct  BFu16ll_D_BFu9ll  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_D_BFu9ll) C1{ FL:16 FL FL:9}



static void Test_BFu16ll_D_BFu9ll()
{
  {
    init_simple_test("BFu16ll_D_BFu9ll");
    static STRUCT_IF_C BFu16ll_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu9ll, BFu16ll_D_BFu9ll)
//============================================================================


struct  BFu16ll_D_BFu9s  {
  __tsu64 v1:16;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_D_BFu9s) C1{ FL:16 FL Fs:9}



static void Test_BFu16ll_D_BFu9s()
{
  {
    init_simple_test("BFu16ll_D_BFu9s");
    static STRUCT_IF_C BFu16ll_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_BFu9s, BFu16ll_D_BFu9s)
//============================================================================


struct  BFu16ll_D_C  {
  __tsu64 v1:16;
  double v2;
  char v3;
};
//SIG(1 BFu16ll_D_C) C1{ FL:16 FL Fc}



static void Test_BFu16ll_D_C()
{
  {
    init_simple_test("BFu16ll_D_C");
    static STRUCT_IF_C BFu16ll_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_C, BFu16ll_D_C)
//============================================================================


struct  BFu16ll_D_D  {
  __tsu64 v1:16;
  double v2;
  double v3;
};
//SIG(1 BFu16ll_D_D) C1{ FL:16 FL[2]}



static void Test_BFu16ll_D_D()
{
  {
    init_simple_test("BFu16ll_D_D");
    static STRUCT_IF_C BFu16ll_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_D, BFu16ll_D_D)
//============================================================================


struct  BFu16ll_D_F  {
  __tsu64 v1:16;
  double v2;
  float v3;
};
//SIG(1 BFu16ll_D_F) C1{ FL:16 FL Fi}



static void Test_BFu16ll_D_F()
{
  {
    init_simple_test("BFu16ll_D_F");
    static STRUCT_IF_C BFu16ll_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_F, BFu16ll_D_F)
//============================================================================


struct  BFu16ll_D_I  {
  __tsu64 v1:16;
  double v2;
  int v3;
};
//SIG(1 BFu16ll_D_I) C1{ FL:16 FL Fi}



static void Test_BFu16ll_D_I()
{
  {
    init_simple_test("BFu16ll_D_I");
    static STRUCT_IF_C BFu16ll_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_I, BFu16ll_D_I)
//============================================================================


struct  BFu16ll_D_Ip  {
  __tsu64 v1:16;
  double v2;
  int *v3;
};
//SIG(1 BFu16ll_D_Ip) C1{ FL:16 FL Fp}



static void Test_BFu16ll_D_Ip()
{
  {
    init_simple_test("BFu16ll_D_Ip");
    static STRUCT_IF_C BFu16ll_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_Ip, BFu16ll_D_Ip)
//============================================================================


struct  BFu16ll_D_L  {
  __tsu64 v1:16;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_D_L) C1{ FL:16 FL[2]}



static void Test_BFu16ll_D_L()
{
  {
    init_simple_test("BFu16ll_D_L");
    static STRUCT_IF_C BFu16ll_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_L, BFu16ll_D_L)
//============================================================================


struct  BFu16ll_D_S  {
  __tsu64 v1:16;
  double v2;
  short v3;
};
//SIG(1 BFu16ll_D_S) C1{ FL:16 FL Fs}



static void Test_BFu16ll_D_S()
{
  {
    init_simple_test("BFu16ll_D_S");
    static STRUCT_IF_C BFu16ll_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_S, BFu16ll_D_S)
//============================================================================


struct  BFu16ll_D_Uc  {
  __tsu64 v1:16;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_D_Uc) C1{ FL:16 FL Fc}



static void Test_BFu16ll_D_Uc()
{
  {
    init_simple_test("BFu16ll_D_Uc");
    static STRUCT_IF_C BFu16ll_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_Uc, BFu16ll_D_Uc)
//============================================================================


struct  BFu16ll_D_Ui  {
  __tsu64 v1:16;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_D_Ui) C1{ FL:16 FL Fi}



static void Test_BFu16ll_D_Ui()
{
  {
    init_simple_test("BFu16ll_D_Ui");
    static STRUCT_IF_C BFu16ll_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_Ui, BFu16ll_D_Ui)
//============================================================================


struct  BFu16ll_D_Ul  {
  __tsu64 v1:16;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_D_Ul) C1{ FL:16 FL[2]}



static void Test_BFu16ll_D_Ul()
{
  {
    init_simple_test("BFu16ll_D_Ul");
    static STRUCT_IF_C BFu16ll_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_Ul, BFu16ll_D_Ul)
//============================================================================


struct  BFu16ll_D_Us  {
  __tsu64 v1:16;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_D_Us) C1{ FL:16 FL Fs}



static void Test_BFu16ll_D_Us()
{
  {
    init_simple_test("BFu16ll_D_Us");
    static STRUCT_IF_C BFu16ll_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_Us, BFu16ll_D_Us)
//============================================================================


struct  BFu16ll_D_Vp  {
  __tsu64 v1:16;
  double v2;
  void *v3;
};
//SIG(1 BFu16ll_D_Vp) C1{ FL:16 FL Fp}



static void Test_BFu16ll_D_Vp()
{
  {
    init_simple_test("BFu16ll_D_Vp");
    static STRUCT_IF_C BFu16ll_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_D_Vp, BFu16ll_D_Vp)
//============================================================================


struct  BFu16ll_F  {
  __tsu64 v1:16;
  float v2;
};
//SIG(1 BFu16ll_F) C1{ FL:16 Fi}



static void Test_BFu16ll_F()
{
  {
    init_simple_test("BFu16ll_F");
    static STRUCT_IF_C BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F");
    check_field_offset(lv, v2, 4, "BFu16ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F, BFu16ll_F)
//============================================================================


struct  BFu16ll_F_BFu15i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_F_BFu15i) C1{ FL:16 Fi Fi:15}



static void Test_BFu16ll_F_BFu15i()
{
  {
    init_simple_test("BFu16ll_F_BFu15i");
    static STRUCT_IF_C BFu16ll_F_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu15i, BFu16ll_F_BFu15i)
//============================================================================


struct  BFu16ll_F_BFu15ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_F_BFu15ll) C1{ FL:16 Fi FL:15}



static void Test_BFu16ll_F_BFu15ll()
{
  {
    init_simple_test("BFu16ll_F_BFu15ll");
    static STRUCT_IF_C BFu16ll_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu15ll, BFu16ll_F_BFu15ll)
//============================================================================


struct  BFu16ll_F_BFu15s  {
  __tsu64 v1:16;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_F_BFu15s) C1{ FL:16 Fi Fs:15}



static void Test_BFu16ll_F_BFu15s()
{
  {
    init_simple_test("BFu16ll_F_BFu15s");
    static STRUCT_IF_C BFu16ll_F_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu15s, BFu16ll_F_BFu15s)
//============================================================================


struct  BFu16ll_F_BFu16i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_F_BFu16i) C1{ FL:16 Fi Fi:16}



static void Test_BFu16ll_F_BFu16i()
{
  {
    init_simple_test("BFu16ll_F_BFu16i");
    static STRUCT_IF_C BFu16ll_F_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu16i, BFu16ll_F_BFu16i)
//============================================================================


struct  BFu16ll_F_BFu16ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_F_BFu16ll) C1{ FL:16 Fi FL:16}



static void Test_BFu16ll_F_BFu16ll()
{
  {
    init_simple_test("BFu16ll_F_BFu16ll");
    static STRUCT_IF_C BFu16ll_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu16ll, BFu16ll_F_BFu16ll)
//============================================================================


struct  BFu16ll_F_BFu16s  {
  __tsu64 v1:16;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_F_BFu16s) C1{ FL:16 Fi Fs:16}



static void Test_BFu16ll_F_BFu16s()
{
  {
    init_simple_test("BFu16ll_F_BFu16s");
    static STRUCT_IF_C BFu16ll_F_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu16s, BFu16ll_F_BFu16s)
//============================================================================


struct  BFu16ll_F_BFu17i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_F_BFu17i) C1{ FL:16 Fi Fi:17}



static void Test_BFu16ll_F_BFu17i()
{
  {
    init_simple_test("BFu16ll_F_BFu17i");
    static STRUCT_IF_C BFu16ll_F_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu17i, BFu16ll_F_BFu17i)
//============================================================================


struct  BFu16ll_F_BFu17ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_F_BFu17ll) C1{ FL:16 Fi FL:17}



static void Test_BFu16ll_F_BFu17ll()
{
  {
    init_simple_test("BFu16ll_F_BFu17ll");
    static STRUCT_IF_C BFu16ll_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu17ll, BFu16ll_F_BFu17ll)
//============================================================================


struct  BFu16ll_F_BFu1c  {
  __tsu64 v1:16;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_F_BFu1c) C1{ FL:16 Fi Fc:1}



static void Test_BFu16ll_F_BFu1c()
{
  {
    init_simple_test("BFu16ll_F_BFu1c");
    static STRUCT_IF_C BFu16ll_F_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu1c, BFu16ll_F_BFu1c)
//============================================================================


struct  BFu16ll_F_BFu1i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_F_BFu1i) C1{ FL:16 Fi Fi:1}



static void Test_BFu16ll_F_BFu1i()
{
  {
    init_simple_test("BFu16ll_F_BFu1i");
    static STRUCT_IF_C BFu16ll_F_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu1i, BFu16ll_F_BFu1i)
//============================================================================


struct  BFu16ll_F_BFu1ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_F_BFu1ll) C1{ FL:16 Fi FL:1}



static void Test_BFu16ll_F_BFu1ll()
{
  {
    init_simple_test("BFu16ll_F_BFu1ll");
    static STRUCT_IF_C BFu16ll_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu1ll, BFu16ll_F_BFu1ll)
//============================================================================


struct  BFu16ll_F_BFu1s  {
  __tsu64 v1:16;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_F_BFu1s) C1{ FL:16 Fi Fs:1}



static void Test_BFu16ll_F_BFu1s()
{
  {
    init_simple_test("BFu16ll_F_BFu1s");
    static STRUCT_IF_C BFu16ll_F_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu1s, BFu16ll_F_BFu1s)
//============================================================================


struct  BFu16ll_F_BFu31i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_F_BFu31i) C1{ FL:16 Fi Fi:31}



static void Test_BFu16ll_F_BFu31i()
{
  {
    init_simple_test("BFu16ll_F_BFu31i");
    static STRUCT_IF_C BFu16ll_F_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu31i, BFu16ll_F_BFu31i)
//============================================================================


struct  BFu16ll_F_BFu31ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_F_BFu31ll) C1{ FL:16 Fi FL:31}



static void Test_BFu16ll_F_BFu31ll()
{
  {
    init_simple_test("BFu16ll_F_BFu31ll");
    static STRUCT_IF_C BFu16ll_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu31ll, BFu16ll_F_BFu31ll)
//============================================================================


struct  BFu16ll_F_BFu32i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_F_BFu32i) C1{ FL:16 Fi Fi:32}



static void Test_BFu16ll_F_BFu32i()
{
  {
    init_simple_test("BFu16ll_F_BFu32i");
    static STRUCT_IF_C BFu16ll_F_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu32i, BFu16ll_F_BFu32i)
//============================================================================


struct  BFu16ll_F_BFu32ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_F_BFu32ll) C1{ FL:16 Fi FL:32}



static void Test_BFu16ll_F_BFu32ll()
{
  {
    init_simple_test("BFu16ll_F_BFu32ll");
    static STRUCT_IF_C BFu16ll_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu32ll, BFu16ll_F_BFu32ll)
//============================================================================


struct  BFu16ll_F_BFu33  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_F_BFu33) C1{ FL:16 Fi FL:33}



static void Test_BFu16ll_F_BFu33()
{
  {
    init_simple_test("BFu16ll_F_BFu33");
    static STRUCT_IF_C BFu16ll_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu16ll_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu16ll_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu33, BFu16ll_F_BFu33)
//============================================================================


struct  BFu16ll_F_BFu7c  {
  __tsu64 v1:16;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_F_BFu7c) C1{ FL:16 Fi Fc:7}



static void Test_BFu16ll_F_BFu7c()
{
  {
    init_simple_test("BFu16ll_F_BFu7c");
    static STRUCT_IF_C BFu16ll_F_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu7c, BFu16ll_F_BFu7c)
//============================================================================


struct  BFu16ll_F_BFu7i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_F_BFu7i) C1{ FL:16 Fi Fi:7}



static void Test_BFu16ll_F_BFu7i()
{
  {
    init_simple_test("BFu16ll_F_BFu7i");
    static STRUCT_IF_C BFu16ll_F_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu7i, BFu16ll_F_BFu7i)
//============================================================================


struct  BFu16ll_F_BFu7ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_F_BFu7ll) C1{ FL:16 Fi FL:7}



static void Test_BFu16ll_F_BFu7ll()
{
  {
    init_simple_test("BFu16ll_F_BFu7ll");
    static STRUCT_IF_C BFu16ll_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu7ll, BFu16ll_F_BFu7ll)
//============================================================================


struct  BFu16ll_F_BFu7s  {
  __tsu64 v1:16;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_F_BFu7s) C1{ FL:16 Fi Fs:7}



static void Test_BFu16ll_F_BFu7s()
{
  {
    init_simple_test("BFu16ll_F_BFu7s");
    static STRUCT_IF_C BFu16ll_F_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu7s, BFu16ll_F_BFu7s)
//============================================================================


struct  BFu16ll_F_BFu8c  {
  __tsu64 v1:16;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_F_BFu8c) C1{ FL:16 Fi Fc:8}



static void Test_BFu16ll_F_BFu8c()
{
  {
    init_simple_test("BFu16ll_F_BFu8c");
    static STRUCT_IF_C BFu16ll_F_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu8c, BFu16ll_F_BFu8c)
//============================================================================


struct  BFu16ll_F_BFu8i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_F_BFu8i) C1{ FL:16 Fi Fi:8}



static void Test_BFu16ll_F_BFu8i()
{
  {
    init_simple_test("BFu16ll_F_BFu8i");
    static STRUCT_IF_C BFu16ll_F_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu8i, BFu16ll_F_BFu8i)
//============================================================================


struct  BFu16ll_F_BFu8ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_F_BFu8ll) C1{ FL:16 Fi FL:8}



static void Test_BFu16ll_F_BFu8ll()
{
  {
    init_simple_test("BFu16ll_F_BFu8ll");
    static STRUCT_IF_C BFu16ll_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu8ll, BFu16ll_F_BFu8ll)
//============================================================================


struct  BFu16ll_F_BFu8s  {
  __tsu64 v1:16;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_F_BFu8s) C1{ FL:16 Fi Fs:8}



static void Test_BFu16ll_F_BFu8s()
{
  {
    init_simple_test("BFu16ll_F_BFu8s");
    static STRUCT_IF_C BFu16ll_F_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu8s, BFu16ll_F_BFu8s)
//============================================================================


struct  BFu16ll_F_BFu9i  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_F_BFu9i) C1{ FL:16 Fi Fi:9}



static void Test_BFu16ll_F_BFu9i()
{
  {
    init_simple_test("BFu16ll_F_BFu9i");
    static STRUCT_IF_C BFu16ll_F_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu9i, BFu16ll_F_BFu9i)
//============================================================================


struct  BFu16ll_F_BFu9ll  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_F_BFu9ll) C1{ FL:16 Fi FL:9}



static void Test_BFu16ll_F_BFu9ll()
{
  {
    init_simple_test("BFu16ll_F_BFu9ll");
    static STRUCT_IF_C BFu16ll_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu9ll, BFu16ll_F_BFu9ll)
//============================================================================


struct  BFu16ll_F_BFu9s  {
  __tsu64 v1:16;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_F_BFu9s) C1{ FL:16 Fi Fs:9}



static void Test_BFu16ll_F_BFu9s()
{
  {
    init_simple_test("BFu16ll_F_BFu9s");
    static STRUCT_IF_C BFu16ll_F_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu16ll_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_BFu9s, BFu16ll_F_BFu9s)
//============================================================================


struct  BFu16ll_F_C  {
  __tsu64 v1:16;
  float v2;
  char v3;
};
//SIG(1 BFu16ll_F_C) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_F_C()
{
  {
    init_simple_test("BFu16ll_F_C");
    static STRUCT_IF_C BFu16ll_F_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_C");
    check_field_offset(lv, v2, 4, "BFu16ll_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_C, BFu16ll_F_C)
//============================================================================


struct  BFu16ll_F_D  {
  __tsu64 v1:16;
  float v2;
  double v3;
};
//SIG(1 BFu16ll_F_D) C1{ FL:16 Fi FL}



static void Test_BFu16ll_F_D()
{
  {
    init_simple_test("BFu16ll_F_D");
    static STRUCT_IF_C BFu16ll_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_D");
    check_field_offset(lv, v2, 4, "BFu16ll_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_D, BFu16ll_F_D)
//============================================================================


struct  BFu16ll_F_F  {
  __tsu64 v1:16;
  float v2;
  float v3;
};
//SIG(1 BFu16ll_F_F) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_F_F()
{
  {
    init_simple_test("BFu16ll_F_F");
    static STRUCT_IF_C BFu16ll_F_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_F");
    check_field_offset(lv, v2, 4, "BFu16ll_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_F, BFu16ll_F_F)
//============================================================================


struct  BFu16ll_F_I  {
  __tsu64 v1:16;
  float v2;
  int v3;
};
//SIG(1 BFu16ll_F_I) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_F_I()
{
  {
    init_simple_test("BFu16ll_F_I");
    static STRUCT_IF_C BFu16ll_F_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_I");
    check_field_offset(lv, v2, 4, "BFu16ll_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_I, BFu16ll_F_I)
//============================================================================


struct  BFu16ll_F_Ip  {
  __tsu64 v1:16;
  float v2;
  int *v3;
};
//SIG(1 BFu16ll_F_Ip) C1{ FL:16 Fi Fp}



static void Test_BFu16ll_F_Ip()
{
  {
    init_simple_test("BFu16ll_F_Ip");
    static STRUCT_IF_C BFu16ll_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_Ip");
    check_field_offset(lv, v2, 4, "BFu16ll_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_Ip, BFu16ll_F_Ip)
//============================================================================


struct  BFu16ll_F_L  {
  __tsu64 v1:16;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_F_L) C1{ FL:16 Fi FL}



static void Test_BFu16ll_F_L()
{
  {
    init_simple_test("BFu16ll_F_L");
    static STRUCT_IF_C BFu16ll_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_L");
    check_field_offset(lv, v2, 4, "BFu16ll_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_L, BFu16ll_F_L)
//============================================================================


struct  BFu16ll_F_S  {
  __tsu64 v1:16;
  float v2;
  short v3;
};
//SIG(1 BFu16ll_F_S) C1{ FL:16 Fi Fs}



static void Test_BFu16ll_F_S()
{
  {
    init_simple_test("BFu16ll_F_S");
    static STRUCT_IF_C BFu16ll_F_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_S");
    check_field_offset(lv, v2, 4, "BFu16ll_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_S, BFu16ll_F_S)
//============================================================================


struct  BFu16ll_F_Uc  {
  __tsu64 v1:16;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_F_Uc) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_F_Uc()
{
  {
    init_simple_test("BFu16ll_F_Uc");
    static STRUCT_IF_C BFu16ll_F_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_Uc");
    check_field_offset(lv, v2, 4, "BFu16ll_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_Uc, BFu16ll_F_Uc)
//============================================================================


struct  BFu16ll_F_Ui  {
  __tsu64 v1:16;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_F_Ui) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_F_Ui()
{
  {
    init_simple_test("BFu16ll_F_Ui");
    static STRUCT_IF_C BFu16ll_F_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_Ui");
    check_field_offset(lv, v2, 4, "BFu16ll_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_Ui, BFu16ll_F_Ui)
//============================================================================


struct  BFu16ll_F_Ul  {
  __tsu64 v1:16;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_F_Ul) C1{ FL:16 Fi FL}



static void Test_BFu16ll_F_Ul()
{
  {
    init_simple_test("BFu16ll_F_Ul");
    static STRUCT_IF_C BFu16ll_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_Ul");
    check_field_offset(lv, v2, 4, "BFu16ll_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_Ul, BFu16ll_F_Ul)
//============================================================================


struct  BFu16ll_F_Us  {
  __tsu64 v1:16;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_F_Us) C1{ FL:16 Fi Fs}



static void Test_BFu16ll_F_Us()
{
  {
    init_simple_test("BFu16ll_F_Us");
    static STRUCT_IF_C BFu16ll_F_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_Us");
    check_field_offset(lv, v2, 4, "BFu16ll_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_Us, BFu16ll_F_Us)
//============================================================================


struct  BFu16ll_F_Vp  {
  __tsu64 v1:16;
  float v2;
  void *v3;
};
//SIG(1 BFu16ll_F_Vp) C1{ FL:16 Fi Fp}



static void Test_BFu16ll_F_Vp()
{
  {
    init_simple_test("BFu16ll_F_Vp");
    static STRUCT_IF_C BFu16ll_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_Vp");
    check_field_offset(lv, v2, 4, "BFu16ll_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_F_Vp, BFu16ll_F_Vp)
//============================================================================


struct  BFu16ll_I  {
  __tsu64 v1:16;
  int v2;
};
//SIG(1 BFu16ll_I) C1{ FL:16 Fi}



static void Test_BFu16ll_I()
{
  {
    init_simple_test("BFu16ll_I");
    static STRUCT_IF_C BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I");
    check_field_offset(lv, v2, 4, "BFu16ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I, BFu16ll_I)
//============================================================================


struct  BFu16ll_I_BFu15i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_I_BFu15i) C1{ FL:16 Fi Fi:15}



static void Test_BFu16ll_I_BFu15i()
{
  {
    init_simple_test("BFu16ll_I_BFu15i");
    static STRUCT_IF_C BFu16ll_I_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu15i, BFu16ll_I_BFu15i)
//============================================================================


struct  BFu16ll_I_BFu15ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_I_BFu15ll) C1{ FL:16 Fi FL:15}



static void Test_BFu16ll_I_BFu15ll()
{
  {
    init_simple_test("BFu16ll_I_BFu15ll");
    static STRUCT_IF_C BFu16ll_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu15ll, BFu16ll_I_BFu15ll)
//============================================================================


struct  BFu16ll_I_BFu15s  {
  __tsu64 v1:16;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_I_BFu15s) C1{ FL:16 Fi Fs:15}



static void Test_BFu16ll_I_BFu15s()
{
  {
    init_simple_test("BFu16ll_I_BFu15s");
    static STRUCT_IF_C BFu16ll_I_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu15s, BFu16ll_I_BFu15s)
//============================================================================


struct  BFu16ll_I_BFu16i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_I_BFu16i) C1{ FL:16 Fi Fi:16}



static void Test_BFu16ll_I_BFu16i()
{
  {
    init_simple_test("BFu16ll_I_BFu16i");
    static STRUCT_IF_C BFu16ll_I_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu16i, BFu16ll_I_BFu16i)
//============================================================================


struct  BFu16ll_I_BFu16ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_I_BFu16ll) C1{ FL:16 Fi FL:16}



static void Test_BFu16ll_I_BFu16ll()
{
  {
    init_simple_test("BFu16ll_I_BFu16ll");
    static STRUCT_IF_C BFu16ll_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu16ll, BFu16ll_I_BFu16ll)
//============================================================================


struct  BFu16ll_I_BFu16s  {
  __tsu64 v1:16;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_I_BFu16s) C1{ FL:16 Fi Fs:16}



static void Test_BFu16ll_I_BFu16s()
{
  {
    init_simple_test("BFu16ll_I_BFu16s");
    static STRUCT_IF_C BFu16ll_I_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu16s, BFu16ll_I_BFu16s)
//============================================================================


struct  BFu16ll_I_BFu17i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_I_BFu17i) C1{ FL:16 Fi Fi:17}



static void Test_BFu16ll_I_BFu17i()
{
  {
    init_simple_test("BFu16ll_I_BFu17i");
    static STRUCT_IF_C BFu16ll_I_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu17i, BFu16ll_I_BFu17i)
//============================================================================


struct  BFu16ll_I_BFu17ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_I_BFu17ll) C1{ FL:16 Fi FL:17}



static void Test_BFu16ll_I_BFu17ll()
{
  {
    init_simple_test("BFu16ll_I_BFu17ll");
    static STRUCT_IF_C BFu16ll_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu17ll, BFu16ll_I_BFu17ll)
//============================================================================


struct  BFu16ll_I_BFu1c  {
  __tsu64 v1:16;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_I_BFu1c) C1{ FL:16 Fi Fc:1}



static void Test_BFu16ll_I_BFu1c()
{
  {
    init_simple_test("BFu16ll_I_BFu1c");
    static STRUCT_IF_C BFu16ll_I_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu1c, BFu16ll_I_BFu1c)
//============================================================================


struct  BFu16ll_I_BFu1i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_I_BFu1i) C1{ FL:16 Fi Fi:1}



static void Test_BFu16ll_I_BFu1i()
{
  {
    init_simple_test("BFu16ll_I_BFu1i");
    static STRUCT_IF_C BFu16ll_I_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu1i, BFu16ll_I_BFu1i)
//============================================================================


struct  BFu16ll_I_BFu1ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_I_BFu1ll) C1{ FL:16 Fi FL:1}



static void Test_BFu16ll_I_BFu1ll()
{
  {
    init_simple_test("BFu16ll_I_BFu1ll");
    static STRUCT_IF_C BFu16ll_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu1ll, BFu16ll_I_BFu1ll)
//============================================================================


struct  BFu16ll_I_BFu1s  {
  __tsu64 v1:16;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_I_BFu1s) C1{ FL:16 Fi Fs:1}



static void Test_BFu16ll_I_BFu1s()
{
  {
    init_simple_test("BFu16ll_I_BFu1s");
    static STRUCT_IF_C BFu16ll_I_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu1s, BFu16ll_I_BFu1s)
//============================================================================


struct  BFu16ll_I_BFu31i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_I_BFu31i) C1{ FL:16 Fi Fi:31}



static void Test_BFu16ll_I_BFu31i()
{
  {
    init_simple_test("BFu16ll_I_BFu31i");
    static STRUCT_IF_C BFu16ll_I_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu31i, BFu16ll_I_BFu31i)
//============================================================================


struct  BFu16ll_I_BFu31ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_I_BFu31ll) C1{ FL:16 Fi FL:31}



static void Test_BFu16ll_I_BFu31ll()
{
  {
    init_simple_test("BFu16ll_I_BFu31ll");
    static STRUCT_IF_C BFu16ll_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu31ll, BFu16ll_I_BFu31ll)
//============================================================================


struct  BFu16ll_I_BFu32i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_I_BFu32i) C1{ FL:16 Fi Fi:32}



static void Test_BFu16ll_I_BFu32i()
{
  {
    init_simple_test("BFu16ll_I_BFu32i");
    static STRUCT_IF_C BFu16ll_I_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu32i, BFu16ll_I_BFu32i)
//============================================================================


struct  BFu16ll_I_BFu32ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_I_BFu32ll) C1{ FL:16 Fi FL:32}



static void Test_BFu16ll_I_BFu32ll()
{
  {
    init_simple_test("BFu16ll_I_BFu32ll");
    static STRUCT_IF_C BFu16ll_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu32ll, BFu16ll_I_BFu32ll)
//============================================================================


struct  BFu16ll_I_BFu33  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_I_BFu33) C1{ FL:16 Fi FL:33}



static void Test_BFu16ll_I_BFu33()
{
  {
    init_simple_test("BFu16ll_I_BFu33");
    static STRUCT_IF_C BFu16ll_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu16ll_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu16ll_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu33, BFu16ll_I_BFu33)
//============================================================================


struct  BFu16ll_I_BFu7c  {
  __tsu64 v1:16;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_I_BFu7c) C1{ FL:16 Fi Fc:7}



static void Test_BFu16ll_I_BFu7c()
{
  {
    init_simple_test("BFu16ll_I_BFu7c");
    static STRUCT_IF_C BFu16ll_I_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu7c, BFu16ll_I_BFu7c)
//============================================================================


struct  BFu16ll_I_BFu7i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_I_BFu7i) C1{ FL:16 Fi Fi:7}



static void Test_BFu16ll_I_BFu7i()
{
  {
    init_simple_test("BFu16ll_I_BFu7i");
    static STRUCT_IF_C BFu16ll_I_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu7i, BFu16ll_I_BFu7i)
//============================================================================


struct  BFu16ll_I_BFu7ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_I_BFu7ll) C1{ FL:16 Fi FL:7}



static void Test_BFu16ll_I_BFu7ll()
{
  {
    init_simple_test("BFu16ll_I_BFu7ll");
    static STRUCT_IF_C BFu16ll_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu7ll, BFu16ll_I_BFu7ll)
//============================================================================


struct  BFu16ll_I_BFu7s  {
  __tsu64 v1:16;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_I_BFu7s) C1{ FL:16 Fi Fs:7}



static void Test_BFu16ll_I_BFu7s()
{
  {
    init_simple_test("BFu16ll_I_BFu7s");
    static STRUCT_IF_C BFu16ll_I_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu7s, BFu16ll_I_BFu7s)
//============================================================================


struct  BFu16ll_I_BFu8c  {
  __tsu64 v1:16;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_I_BFu8c) C1{ FL:16 Fi Fc:8}



static void Test_BFu16ll_I_BFu8c()
{
  {
    init_simple_test("BFu16ll_I_BFu8c");
    static STRUCT_IF_C BFu16ll_I_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu8c, BFu16ll_I_BFu8c)
//============================================================================


struct  BFu16ll_I_BFu8i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_I_BFu8i) C1{ FL:16 Fi Fi:8}



static void Test_BFu16ll_I_BFu8i()
{
  {
    init_simple_test("BFu16ll_I_BFu8i");
    static STRUCT_IF_C BFu16ll_I_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu8i, BFu16ll_I_BFu8i)
//============================================================================


struct  BFu16ll_I_BFu8ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_I_BFu8ll) C1{ FL:16 Fi FL:8}



static void Test_BFu16ll_I_BFu8ll()
{
  {
    init_simple_test("BFu16ll_I_BFu8ll");
    static STRUCT_IF_C BFu16ll_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu8ll, BFu16ll_I_BFu8ll)
//============================================================================


struct  BFu16ll_I_BFu8s  {
  __tsu64 v1:16;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_I_BFu8s) C1{ FL:16 Fi Fs:8}



static void Test_BFu16ll_I_BFu8s()
{
  {
    init_simple_test("BFu16ll_I_BFu8s");
    static STRUCT_IF_C BFu16ll_I_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu8s, BFu16ll_I_BFu8s)
//============================================================================


struct  BFu16ll_I_BFu9i  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_I_BFu9i) C1{ FL:16 Fi Fi:9}



static void Test_BFu16ll_I_BFu9i()
{
  {
    init_simple_test("BFu16ll_I_BFu9i");
    static STRUCT_IF_C BFu16ll_I_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu9i, BFu16ll_I_BFu9i)
//============================================================================


struct  BFu16ll_I_BFu9ll  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_I_BFu9ll) C1{ FL:16 Fi FL:9}



static void Test_BFu16ll_I_BFu9ll()
{
  {
    init_simple_test("BFu16ll_I_BFu9ll");
    static STRUCT_IF_C BFu16ll_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu9ll, BFu16ll_I_BFu9ll)
//============================================================================


struct  BFu16ll_I_BFu9s  {
  __tsu64 v1:16;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_I_BFu9s) C1{ FL:16 Fi Fs:9}



static void Test_BFu16ll_I_BFu9s()
{
  {
    init_simple_test("BFu16ll_I_BFu9s");
    static STRUCT_IF_C BFu16ll_I_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu16ll_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_BFu9s, BFu16ll_I_BFu9s)
//============================================================================


struct  BFu16ll_I_C  {
  __tsu64 v1:16;
  int v2;
  char v3;
};
//SIG(1 BFu16ll_I_C) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_I_C()
{
  {
    init_simple_test("BFu16ll_I_C");
    static STRUCT_IF_C BFu16ll_I_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_C");
    check_field_offset(lv, v2, 4, "BFu16ll_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_C, BFu16ll_I_C)
//============================================================================


struct  BFu16ll_I_D  {
  __tsu64 v1:16;
  int v2;
  double v3;
};
//SIG(1 BFu16ll_I_D) C1{ FL:16 Fi FL}



static void Test_BFu16ll_I_D()
{
  {
    init_simple_test("BFu16ll_I_D");
    static STRUCT_IF_C BFu16ll_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_D");
    check_field_offset(lv, v2, 4, "BFu16ll_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_D, BFu16ll_I_D)
//============================================================================


struct  BFu16ll_I_F  {
  __tsu64 v1:16;
  int v2;
  float v3;
};
//SIG(1 BFu16ll_I_F) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_I_F()
{
  {
    init_simple_test("BFu16ll_I_F");
    static STRUCT_IF_C BFu16ll_I_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_F");
    check_field_offset(lv, v2, 4, "BFu16ll_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_F, BFu16ll_I_F)
//============================================================================


struct  BFu16ll_I_I  {
  __tsu64 v1:16;
  int v2;
  int v3;
};
//SIG(1 BFu16ll_I_I) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_I_I()
{
  {
    init_simple_test("BFu16ll_I_I");
    static STRUCT_IF_C BFu16ll_I_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_I");
    check_field_offset(lv, v2, 4, "BFu16ll_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_I, BFu16ll_I_I)
//============================================================================


struct  BFu16ll_I_Ip  {
  __tsu64 v1:16;
  int v2;
  int *v3;
};
//SIG(1 BFu16ll_I_Ip) C1{ FL:16 Fi Fp}



static void Test_BFu16ll_I_Ip()
{
  {
    init_simple_test("BFu16ll_I_Ip");
    static STRUCT_IF_C BFu16ll_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_Ip");
    check_field_offset(lv, v2, 4, "BFu16ll_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_Ip, BFu16ll_I_Ip)
//============================================================================


struct  BFu16ll_I_L  {
  __tsu64 v1:16;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_I_L) C1{ FL:16 Fi FL}



static void Test_BFu16ll_I_L()
{
  {
    init_simple_test("BFu16ll_I_L");
    static STRUCT_IF_C BFu16ll_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_L");
    check_field_offset(lv, v2, 4, "BFu16ll_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_L, BFu16ll_I_L)
//============================================================================


struct  BFu16ll_I_S  {
  __tsu64 v1:16;
  int v2;
  short v3;
};
//SIG(1 BFu16ll_I_S) C1{ FL:16 Fi Fs}



static void Test_BFu16ll_I_S()
{
  {
    init_simple_test("BFu16ll_I_S");
    static STRUCT_IF_C BFu16ll_I_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_S");
    check_field_offset(lv, v2, 4, "BFu16ll_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_S, BFu16ll_I_S)
//============================================================================


struct  BFu16ll_I_Uc  {
  __tsu64 v1:16;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_I_Uc) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_I_Uc()
{
  {
    init_simple_test("BFu16ll_I_Uc");
    static STRUCT_IF_C BFu16ll_I_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_Uc");
    check_field_offset(lv, v2, 4, "BFu16ll_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_Uc, BFu16ll_I_Uc)
//============================================================================


struct  BFu16ll_I_Ui  {
  __tsu64 v1:16;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_I_Ui) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_I_Ui()
{
  {
    init_simple_test("BFu16ll_I_Ui");
    static STRUCT_IF_C BFu16ll_I_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_Ui");
    check_field_offset(lv, v2, 4, "BFu16ll_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_Ui, BFu16ll_I_Ui)
//============================================================================


struct  BFu16ll_I_Ul  {
  __tsu64 v1:16;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_I_Ul) C1{ FL:16 Fi FL}



static void Test_BFu16ll_I_Ul()
{
  {
    init_simple_test("BFu16ll_I_Ul");
    static STRUCT_IF_C BFu16ll_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_Ul");
    check_field_offset(lv, v2, 4, "BFu16ll_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_Ul, BFu16ll_I_Ul)
//============================================================================


struct  BFu16ll_I_Us  {
  __tsu64 v1:16;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_I_Us) C1{ FL:16 Fi Fs}



static void Test_BFu16ll_I_Us()
{
  {
    init_simple_test("BFu16ll_I_Us");
    static STRUCT_IF_C BFu16ll_I_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_Us");
    check_field_offset(lv, v2, 4, "BFu16ll_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_Us, BFu16ll_I_Us)
//============================================================================


struct  BFu16ll_I_Vp  {
  __tsu64 v1:16;
  int v2;
  void *v3;
};
//SIG(1 BFu16ll_I_Vp) C1{ FL:16 Fi Fp}



static void Test_BFu16ll_I_Vp()
{
  {
    init_simple_test("BFu16ll_I_Vp");
    static STRUCT_IF_C BFu16ll_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_Vp");
    check_field_offset(lv, v2, 4, "BFu16ll_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_I_Vp, BFu16ll_I_Vp)
//============================================================================


struct  BFu16ll_Ip  {
  __tsu64 v1:16;
  int *v2;
};
//SIG(1 BFu16ll_Ip) C1{ FL:16 Fp}



static void Test_BFu16ll_Ip()
{
  {
    init_simple_test("BFu16ll_Ip");
    static STRUCT_IF_C BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip, BFu16ll_Ip)
//============================================================================


struct  BFu16ll_Ip_BFu15i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_Ip_BFu15i) C1{ FL:16 Fp Fi:15}



static void Test_BFu16ll_Ip_BFu15i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu15i");
    static STRUCT_IF_C BFu16ll_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16ll_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16ll_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu15i, BFu16ll_Ip_BFu15i)
//============================================================================


struct  BFu16ll_Ip_BFu15ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_Ip_BFu15ll) C1{ FL:16 Fp FL:15}



static void Test_BFu16ll_Ip_BFu15ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu15ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16ll_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16ll_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu15ll, BFu16ll_Ip_BFu15ll)
//============================================================================


struct  BFu16ll_Ip_BFu15s  {
  __tsu64 v1:16;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_Ip_BFu15s) C1{ FL:16 Fp Fs:15}



static void Test_BFu16ll_Ip_BFu15s()
{
  {
    init_simple_test("BFu16ll_Ip_BFu15s");
    static STRUCT_IF_C BFu16ll_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16ll_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16ll_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu15s, BFu16ll_Ip_BFu15s)
//============================================================================


struct  BFu16ll_Ip_BFu16i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_Ip_BFu16i) C1{ FL:16 Fp Fi:16}



static void Test_BFu16ll_Ip_BFu16i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu16i");
    static STRUCT_IF_C BFu16ll_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16ll_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu16i, BFu16ll_Ip_BFu16i)
//============================================================================


struct  BFu16ll_Ip_BFu16ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_Ip_BFu16ll) C1{ FL:16 Fp FL:16}



static void Test_BFu16ll_Ip_BFu16ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu16ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16ll_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu16ll, BFu16ll_Ip_BFu16ll)
//============================================================================


struct  BFu16ll_Ip_BFu16s  {
  __tsu64 v1:16;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_Ip_BFu16s) C1{ FL:16 Fp Fs:16}



static void Test_BFu16ll_Ip_BFu16s()
{
  {
    init_simple_test("BFu16ll_Ip_BFu16s");
    static STRUCT_IF_C BFu16ll_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16ll_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu16s, BFu16ll_Ip_BFu16s)
//============================================================================


struct  BFu16ll_Ip_BFu17i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_Ip_BFu17i) C1{ FL:16 Fp Fi:17}



static void Test_BFu16ll_Ip_BFu17i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu17i");
    static STRUCT_IF_C BFu16ll_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu16ll_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu16ll_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu17i, BFu16ll_Ip_BFu17i)
//============================================================================


struct  BFu16ll_Ip_BFu17ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_Ip_BFu17ll) C1{ FL:16 Fp FL:17}



static void Test_BFu16ll_Ip_BFu17ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu17ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu16ll_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu16ll_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu17ll, BFu16ll_Ip_BFu17ll)
//============================================================================


struct  BFu16ll_Ip_BFu1c  {
  __tsu64 v1:16;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_Ip_BFu1c) C1{ FL:16 Fp Fc:1}



static void Test_BFu16ll_Ip_BFu1c()
{
  {
    init_simple_test("BFu16ll_Ip_BFu1c");
    static STRUCT_IF_C BFu16ll_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16ll_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu1c, BFu16ll_Ip_BFu1c)
//============================================================================


struct  BFu16ll_Ip_BFu1i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_Ip_BFu1i) C1{ FL:16 Fp Fi:1}



static void Test_BFu16ll_Ip_BFu1i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu1i");
    static STRUCT_IF_C BFu16ll_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16ll_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu1i, BFu16ll_Ip_BFu1i)
//============================================================================


struct  BFu16ll_Ip_BFu1ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_Ip_BFu1ll) C1{ FL:16 Fp FL:1}



static void Test_BFu16ll_Ip_BFu1ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu1ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16ll_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu1ll, BFu16ll_Ip_BFu1ll)
//============================================================================


struct  BFu16ll_Ip_BFu1s  {
  __tsu64 v1:16;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_Ip_BFu1s) C1{ FL:16 Fp Fs:1}



static void Test_BFu16ll_Ip_BFu1s()
{
  {
    init_simple_test("BFu16ll_Ip_BFu1s");
    static STRUCT_IF_C BFu16ll_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16ll_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu1s, BFu16ll_Ip_BFu1s)
//============================================================================


struct  BFu16ll_Ip_BFu31i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_Ip_BFu31i) C1{ FL:16 Fp Fi:31}



static void Test_BFu16ll_Ip_BFu31i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu31i");
    static STRUCT_IF_C BFu16ll_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu16ll_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu16ll_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu31i, BFu16ll_Ip_BFu31i)
//============================================================================


struct  BFu16ll_Ip_BFu31ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_Ip_BFu31ll) C1{ FL:16 Fp FL:31}



static void Test_BFu16ll_Ip_BFu31ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu31ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu16ll_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu16ll_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu31ll, BFu16ll_Ip_BFu31ll)
//============================================================================


struct  BFu16ll_Ip_BFu32i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_Ip_BFu32i) C1{ FL:16 Fp Fi:32}



static void Test_BFu16ll_Ip_BFu32i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu32i");
    static STRUCT_IF_C BFu16ll_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu16ll_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu16ll_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu32i, BFu16ll_Ip_BFu32i)
//============================================================================


struct  BFu16ll_Ip_BFu32ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_Ip_BFu32ll) C1{ FL:16 Fp FL:32}



static void Test_BFu16ll_Ip_BFu32ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu32ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu16ll_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu16ll_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu32ll, BFu16ll_Ip_BFu32ll)
//============================================================================


struct  BFu16ll_Ip_BFu33  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_Ip_BFu33) C1{ FL:16 Fp FL:33}



static void Test_BFu16ll_Ip_BFu33()
{
  {
    init_simple_test("BFu16ll_Ip_BFu33");
    static STRUCT_IF_C BFu16ll_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu16ll_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu16ll_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu33, BFu16ll_Ip_BFu33)
//============================================================================


struct  BFu16ll_Ip_BFu7c  {
  __tsu64 v1:16;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_Ip_BFu7c) C1{ FL:16 Fp Fc:7}



static void Test_BFu16ll_Ip_BFu7c()
{
  {
    init_simple_test("BFu16ll_Ip_BFu7c");
    static STRUCT_IF_C BFu16ll_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16ll_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16ll_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu7c, BFu16ll_Ip_BFu7c)
//============================================================================


struct  BFu16ll_Ip_BFu7i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_Ip_BFu7i) C1{ FL:16 Fp Fi:7}



static void Test_BFu16ll_Ip_BFu7i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu7i");
    static STRUCT_IF_C BFu16ll_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16ll_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16ll_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu7i, BFu16ll_Ip_BFu7i)
//============================================================================


struct  BFu16ll_Ip_BFu7ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_Ip_BFu7ll) C1{ FL:16 Fp FL:7}



static void Test_BFu16ll_Ip_BFu7ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu7ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16ll_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16ll_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu7ll, BFu16ll_Ip_BFu7ll)
//============================================================================


struct  BFu16ll_Ip_BFu7s  {
  __tsu64 v1:16;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_Ip_BFu7s) C1{ FL:16 Fp Fs:7}



static void Test_BFu16ll_Ip_BFu7s()
{
  {
    init_simple_test("BFu16ll_Ip_BFu7s");
    static STRUCT_IF_C BFu16ll_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16ll_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16ll_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu7s, BFu16ll_Ip_BFu7s)
//============================================================================


struct  BFu16ll_Ip_BFu8c  {
  __tsu64 v1:16;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_Ip_BFu8c) C1{ FL:16 Fp Fc:8}



static void Test_BFu16ll_Ip_BFu8c()
{
  {
    init_simple_test("BFu16ll_Ip_BFu8c");
    static STRUCT_IF_C BFu16ll_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16ll_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16ll_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu8c, BFu16ll_Ip_BFu8c)
//============================================================================


struct  BFu16ll_Ip_BFu8i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_Ip_BFu8i) C1{ FL:16 Fp Fi:8}



static void Test_BFu16ll_Ip_BFu8i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu8i");
    static STRUCT_IF_C BFu16ll_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16ll_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16ll_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu8i, BFu16ll_Ip_BFu8i)
//============================================================================


struct  BFu16ll_Ip_BFu8ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_Ip_BFu8ll) C1{ FL:16 Fp FL:8}



static void Test_BFu16ll_Ip_BFu8ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu8ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16ll_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16ll_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu8ll, BFu16ll_Ip_BFu8ll)
//============================================================================


struct  BFu16ll_Ip_BFu8s  {
  __tsu64 v1:16;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_Ip_BFu8s) C1{ FL:16 Fp Fs:8}



static void Test_BFu16ll_Ip_BFu8s()
{
  {
    init_simple_test("BFu16ll_Ip_BFu8s");
    static STRUCT_IF_C BFu16ll_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16ll_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16ll_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu8s, BFu16ll_Ip_BFu8s)
//============================================================================


struct  BFu16ll_Ip_BFu9i  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_Ip_BFu9i) C1{ FL:16 Fp Fi:9}



static void Test_BFu16ll_Ip_BFu9i()
{
  {
    init_simple_test("BFu16ll_Ip_BFu9i");
    static STRUCT_IF_C BFu16ll_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16ll_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16ll_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu9i, BFu16ll_Ip_BFu9i)
//============================================================================


struct  BFu16ll_Ip_BFu9ll  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_Ip_BFu9ll) C1{ FL:16 Fp FL:9}



static void Test_BFu16ll_Ip_BFu9ll()
{
  {
    init_simple_test("BFu16ll_Ip_BFu9ll");
    static STRUCT_IF_C BFu16ll_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16ll_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16ll_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu9ll, BFu16ll_Ip_BFu9ll)
//============================================================================


struct  BFu16ll_Ip_BFu9s  {
  __tsu64 v1:16;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_Ip_BFu9s) C1{ FL:16 Fp Fs:9}



static void Test_BFu16ll_Ip_BFu9s()
{
  {
    init_simple_test("BFu16ll_Ip_BFu9s");
    static STRUCT_IF_C BFu16ll_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16ll_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16ll_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_BFu9s, BFu16ll_Ip_BFu9s)
//============================================================================


struct  BFu16ll_Ip_C  {
  __tsu64 v1:16;
  int *v2;
  char v3;
};
//SIG(1 BFu16ll_Ip_C) C1{ FL:16 Fp Fc}



static void Test_BFu16ll_Ip_C()
{
  {
    init_simple_test("BFu16ll_Ip_C");
    static STRUCT_IF_C BFu16ll_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_C, BFu16ll_Ip_C)
//============================================================================


struct  BFu16ll_Ip_D  {
  __tsu64 v1:16;
  int *v2;
  double v3;
};
//SIG(1 BFu16ll_Ip_D) C1{ FL:16 Fp FL}



static void Test_BFu16ll_Ip_D()
{
  {
    init_simple_test("BFu16ll_Ip_D");
    static STRUCT_IF_C BFu16ll_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_D, BFu16ll_Ip_D)
//============================================================================


struct  BFu16ll_Ip_F  {
  __tsu64 v1:16;
  int *v2;
  float v3;
};
//SIG(1 BFu16ll_Ip_F) C1{ FL:16 Fp Fi}



static void Test_BFu16ll_Ip_F()
{
  {
    init_simple_test("BFu16ll_Ip_F");
    static STRUCT_IF_C BFu16ll_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_F, BFu16ll_Ip_F)
//============================================================================


struct  BFu16ll_Ip_I  {
  __tsu64 v1:16;
  int *v2;
  int v3;
};
//SIG(1 BFu16ll_Ip_I) C1{ FL:16 Fp Fi}



static void Test_BFu16ll_Ip_I()
{
  {
    init_simple_test("BFu16ll_Ip_I");
    static STRUCT_IF_C BFu16ll_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_I, BFu16ll_Ip_I)
//============================================================================


struct  BFu16ll_Ip_Ip  {
  __tsu64 v1:16;
  int *v2;
  int *v3;
};
//SIG(1 BFu16ll_Ip_Ip) C1{ FL:16 Fp[2]}



static void Test_BFu16ll_Ip_Ip()
{
  {
    init_simple_test("BFu16ll_Ip_Ip");
    static STRUCT_IF_C BFu16ll_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_Ip, BFu16ll_Ip_Ip)
//============================================================================


struct  BFu16ll_Ip_L  {
  __tsu64 v1:16;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_Ip_L) C1{ FL:16 Fp FL}



static void Test_BFu16ll_Ip_L()
{
  {
    init_simple_test("BFu16ll_Ip_L");
    static STRUCT_IF_C BFu16ll_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_L, BFu16ll_Ip_L)
//============================================================================


struct  BFu16ll_Ip_S  {
  __tsu64 v1:16;
  int *v2;
  short v3;
};
//SIG(1 BFu16ll_Ip_S) C1{ FL:16 Fp Fs}



static void Test_BFu16ll_Ip_S()
{
  {
    init_simple_test("BFu16ll_Ip_S");
    static STRUCT_IF_C BFu16ll_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_S, BFu16ll_Ip_S)
//============================================================================


struct  BFu16ll_Ip_Uc  {
  __tsu64 v1:16;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_Ip_Uc) C1{ FL:16 Fp Fc}



static void Test_BFu16ll_Ip_Uc()
{
  {
    init_simple_test("BFu16ll_Ip_Uc");
    static STRUCT_IF_C BFu16ll_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_Uc, BFu16ll_Ip_Uc)
//============================================================================


struct  BFu16ll_Ip_Ui  {
  __tsu64 v1:16;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_Ip_Ui) C1{ FL:16 Fp Fi}



static void Test_BFu16ll_Ip_Ui()
{
  {
    init_simple_test("BFu16ll_Ip_Ui");
    static STRUCT_IF_C BFu16ll_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_Ui, BFu16ll_Ip_Ui)
//============================================================================


struct  BFu16ll_Ip_Ul  {
  __tsu64 v1:16;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_Ip_Ul) C1{ FL:16 Fp FL}



static void Test_BFu16ll_Ip_Ul()
{
  {
    init_simple_test("BFu16ll_Ip_Ul");
    static STRUCT_IF_C BFu16ll_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_Ul, BFu16ll_Ip_Ul)
//============================================================================


struct  BFu16ll_Ip_Us  {
  __tsu64 v1:16;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_Ip_Us) C1{ FL:16 Fp Fs}



static void Test_BFu16ll_Ip_Us()
{
  {
    init_simple_test("BFu16ll_Ip_Us");
    static STRUCT_IF_C BFu16ll_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_Us, BFu16ll_Ip_Us)
//============================================================================


struct  BFu16ll_Ip_Vp  {
  __tsu64 v1:16;
  int *v2;
  void *v3;
};
//SIG(1 BFu16ll_Ip_Vp) C1{ FL:16 Fp[2]}



static void Test_BFu16ll_Ip_Vp()
{
  {
    init_simple_test("BFu16ll_Ip_Vp");
    static STRUCT_IF_C BFu16ll_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ip_Vp, BFu16ll_Ip_Vp)
//============================================================================


struct  BFu16ll_L  {
  __tsu64 v1:16;
  __tsi64 v2;
};
//SIG(1 BFu16ll_L) C1{ FL:16 FL}



static void Test_BFu16ll_L()
{
  {
    init_simple_test("BFu16ll_L");
    static STRUCT_IF_C BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L, BFu16ll_L)
//============================================================================


struct  BFu16ll_L_BFu15i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_L_BFu15i) C1{ FL:16 FL Fi:15}



static void Test_BFu16ll_L_BFu15i()
{
  {
    init_simple_test("BFu16ll_L_BFu15i");
    static STRUCT_IF_C BFu16ll_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu15i, BFu16ll_L_BFu15i)
//============================================================================


struct  BFu16ll_L_BFu15ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_L_BFu15ll) C1{ FL:16 FL FL:15}



static void Test_BFu16ll_L_BFu15ll()
{
  {
    init_simple_test("BFu16ll_L_BFu15ll");
    static STRUCT_IF_C BFu16ll_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu15ll, BFu16ll_L_BFu15ll)
//============================================================================


struct  BFu16ll_L_BFu15s  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_L_BFu15s) C1{ FL:16 FL Fs:15}



static void Test_BFu16ll_L_BFu15s()
{
  {
    init_simple_test("BFu16ll_L_BFu15s");
    static STRUCT_IF_C BFu16ll_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu15s, BFu16ll_L_BFu15s)
//============================================================================


struct  BFu16ll_L_BFu16i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_L_BFu16i) C1{ FL:16 FL Fi:16}



static void Test_BFu16ll_L_BFu16i()
{
  {
    init_simple_test("BFu16ll_L_BFu16i");
    static STRUCT_IF_C BFu16ll_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu16i, BFu16ll_L_BFu16i)
//============================================================================


struct  BFu16ll_L_BFu16ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_L_BFu16ll) C1{ FL:16 FL FL:16}



static void Test_BFu16ll_L_BFu16ll()
{
  {
    init_simple_test("BFu16ll_L_BFu16ll");
    static STRUCT_IF_C BFu16ll_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu16ll, BFu16ll_L_BFu16ll)
//============================================================================


struct  BFu16ll_L_BFu16s  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_L_BFu16s) C1{ FL:16 FL Fs:16}



static void Test_BFu16ll_L_BFu16s()
{
  {
    init_simple_test("BFu16ll_L_BFu16s");
    static STRUCT_IF_C BFu16ll_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu16s, BFu16ll_L_BFu16s)
//============================================================================


struct  BFu16ll_L_BFu17i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_L_BFu17i) C1{ FL:16 FL Fi:17}



static void Test_BFu16ll_L_BFu17i()
{
  {
    init_simple_test("BFu16ll_L_BFu17i");
    static STRUCT_IF_C BFu16ll_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16ll_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16ll_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu17i, BFu16ll_L_BFu17i)
//============================================================================


struct  BFu16ll_L_BFu17ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_L_BFu17ll) C1{ FL:16 FL FL:17}



static void Test_BFu16ll_L_BFu17ll()
{
  {
    init_simple_test("BFu16ll_L_BFu17ll");
    static STRUCT_IF_C BFu16ll_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16ll_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16ll_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu17ll, BFu16ll_L_BFu17ll)
//============================================================================


struct  BFu16ll_L_BFu1c  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_L_BFu1c) C1{ FL:16 FL Fc:1}



static void Test_BFu16ll_L_BFu1c()
{
  {
    init_simple_test("BFu16ll_L_BFu1c");
    static STRUCT_IF_C BFu16ll_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu1c, BFu16ll_L_BFu1c)
//============================================================================


struct  BFu16ll_L_BFu1i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_L_BFu1i) C1{ FL:16 FL Fi:1}



static void Test_BFu16ll_L_BFu1i()
{
  {
    init_simple_test("BFu16ll_L_BFu1i");
    static STRUCT_IF_C BFu16ll_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu1i, BFu16ll_L_BFu1i)
//============================================================================


struct  BFu16ll_L_BFu1ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_L_BFu1ll) C1{ FL:16 FL FL:1}



static void Test_BFu16ll_L_BFu1ll()
{
  {
    init_simple_test("BFu16ll_L_BFu1ll");
    static STRUCT_IF_C BFu16ll_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu1ll, BFu16ll_L_BFu1ll)
//============================================================================


struct  BFu16ll_L_BFu1s  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_L_BFu1s) C1{ FL:16 FL Fs:1}



static void Test_BFu16ll_L_BFu1s()
{
  {
    init_simple_test("BFu16ll_L_BFu1s");
    static STRUCT_IF_C BFu16ll_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu1s, BFu16ll_L_BFu1s)
//============================================================================


struct  BFu16ll_L_BFu31i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_L_BFu31i) C1{ FL:16 FL Fi:31}



static void Test_BFu16ll_L_BFu31i()
{
  {
    init_simple_test("BFu16ll_L_BFu31i");
    static STRUCT_IF_C BFu16ll_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16ll_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16ll_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu31i, BFu16ll_L_BFu31i)
//============================================================================


struct  BFu16ll_L_BFu31ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_L_BFu31ll) C1{ FL:16 FL FL:31}



static void Test_BFu16ll_L_BFu31ll()
{
  {
    init_simple_test("BFu16ll_L_BFu31ll");
    static STRUCT_IF_C BFu16ll_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16ll_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16ll_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu31ll, BFu16ll_L_BFu31ll)
//============================================================================


struct  BFu16ll_L_BFu32i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_L_BFu32i) C1{ FL:16 FL Fi:32}



static void Test_BFu16ll_L_BFu32i()
{
  {
    init_simple_test("BFu16ll_L_BFu32i");
    static STRUCT_IF_C BFu16ll_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16ll_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16ll_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu32i, BFu16ll_L_BFu32i)
//============================================================================


struct  BFu16ll_L_BFu32ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_L_BFu32ll) C1{ FL:16 FL FL:32}



static void Test_BFu16ll_L_BFu32ll()
{
  {
    init_simple_test("BFu16ll_L_BFu32ll");
    static STRUCT_IF_C BFu16ll_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16ll_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16ll_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu32ll, BFu16ll_L_BFu32ll)
//============================================================================


struct  BFu16ll_L_BFu33  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_L_BFu33) C1{ FL:16 FL FL:33}



static void Test_BFu16ll_L_BFu33()
{
  {
    init_simple_test("BFu16ll_L_BFu33");
    static STRUCT_IF_C BFu16ll_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu16ll_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu16ll_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu33, BFu16ll_L_BFu33)
//============================================================================


struct  BFu16ll_L_BFu7c  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_L_BFu7c) C1{ FL:16 FL Fc:7}



static void Test_BFu16ll_L_BFu7c()
{
  {
    init_simple_test("BFu16ll_L_BFu7c");
    static STRUCT_IF_C BFu16ll_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu7c, BFu16ll_L_BFu7c)
//============================================================================


struct  BFu16ll_L_BFu7i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_L_BFu7i) C1{ FL:16 FL Fi:7}



static void Test_BFu16ll_L_BFu7i()
{
  {
    init_simple_test("BFu16ll_L_BFu7i");
    static STRUCT_IF_C BFu16ll_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu7i, BFu16ll_L_BFu7i)
//============================================================================


struct  BFu16ll_L_BFu7ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_L_BFu7ll) C1{ FL:16 FL FL:7}



static void Test_BFu16ll_L_BFu7ll()
{
  {
    init_simple_test("BFu16ll_L_BFu7ll");
    static STRUCT_IF_C BFu16ll_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu7ll, BFu16ll_L_BFu7ll)
//============================================================================


struct  BFu16ll_L_BFu7s  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_L_BFu7s) C1{ FL:16 FL Fs:7}



static void Test_BFu16ll_L_BFu7s()
{
  {
    init_simple_test("BFu16ll_L_BFu7s");
    static STRUCT_IF_C BFu16ll_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu7s, BFu16ll_L_BFu7s)
//============================================================================


struct  BFu16ll_L_BFu8c  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_L_BFu8c) C1{ FL:16 FL Fc:8}



static void Test_BFu16ll_L_BFu8c()
{
  {
    init_simple_test("BFu16ll_L_BFu8c");
    static STRUCT_IF_C BFu16ll_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu8c, BFu16ll_L_BFu8c)
//============================================================================


struct  BFu16ll_L_BFu8i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_L_BFu8i) C1{ FL:16 FL Fi:8}



static void Test_BFu16ll_L_BFu8i()
{
  {
    init_simple_test("BFu16ll_L_BFu8i");
    static STRUCT_IF_C BFu16ll_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu8i, BFu16ll_L_BFu8i)
//============================================================================


struct  BFu16ll_L_BFu8ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_L_BFu8ll) C1{ FL:16 FL FL:8}



static void Test_BFu16ll_L_BFu8ll()
{
  {
    init_simple_test("BFu16ll_L_BFu8ll");
    static STRUCT_IF_C BFu16ll_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu8ll, BFu16ll_L_BFu8ll)
//============================================================================


struct  BFu16ll_L_BFu8s  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_L_BFu8s) C1{ FL:16 FL Fs:8}



static void Test_BFu16ll_L_BFu8s()
{
  {
    init_simple_test("BFu16ll_L_BFu8s");
    static STRUCT_IF_C BFu16ll_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu8s, BFu16ll_L_BFu8s)
//============================================================================


struct  BFu16ll_L_BFu9i  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_L_BFu9i) C1{ FL:16 FL Fi:9}



static void Test_BFu16ll_L_BFu9i()
{
  {
    init_simple_test("BFu16ll_L_BFu9i");
    static STRUCT_IF_C BFu16ll_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu9i, BFu16ll_L_BFu9i)
//============================================================================


struct  BFu16ll_L_BFu9ll  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_L_BFu9ll) C1{ FL:16 FL FL:9}



static void Test_BFu16ll_L_BFu9ll()
{
  {
    init_simple_test("BFu16ll_L_BFu9ll");
    static STRUCT_IF_C BFu16ll_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu9ll, BFu16ll_L_BFu9ll)
//============================================================================


struct  BFu16ll_L_BFu9s  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_L_BFu9s) C1{ FL:16 FL Fs:9}



static void Test_BFu16ll_L_BFu9s()
{
  {
    init_simple_test("BFu16ll_L_BFu9s");
    static STRUCT_IF_C BFu16ll_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_BFu9s, BFu16ll_L_BFu9s)
//============================================================================


struct  BFu16ll_L_C  {
  __tsu64 v1:16;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu16ll_L_C) C1{ FL:16 FL Fc}



static void Test_BFu16ll_L_C()
{
  {
    init_simple_test("BFu16ll_L_C");
    static STRUCT_IF_C BFu16ll_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_C, BFu16ll_L_C)
//============================================================================


struct  BFu16ll_L_D  {
  __tsu64 v1:16;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu16ll_L_D) C1{ FL:16 FL[2]}



static void Test_BFu16ll_L_D()
{
  {
    init_simple_test("BFu16ll_L_D");
    static STRUCT_IF_C BFu16ll_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_D, BFu16ll_L_D)
//============================================================================


struct  BFu16ll_L_F  {
  __tsu64 v1:16;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu16ll_L_F) C1{ FL:16 FL Fi}



static void Test_BFu16ll_L_F()
{
  {
    init_simple_test("BFu16ll_L_F");
    static STRUCT_IF_C BFu16ll_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_F, BFu16ll_L_F)
//============================================================================


struct  BFu16ll_L_I  {
  __tsu64 v1:16;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu16ll_L_I) C1{ FL:16 FL Fi}



static void Test_BFu16ll_L_I()
{
  {
    init_simple_test("BFu16ll_L_I");
    static STRUCT_IF_C BFu16ll_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_I, BFu16ll_L_I)
//============================================================================


struct  BFu16ll_L_Ip  {
  __tsu64 v1:16;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu16ll_L_Ip) C1{ FL:16 FL Fp}



static void Test_BFu16ll_L_Ip()
{
  {
    init_simple_test("BFu16ll_L_Ip");
    static STRUCT_IF_C BFu16ll_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_Ip, BFu16ll_L_Ip)
//============================================================================


struct  BFu16ll_L_L  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_L_L) C1{ FL:16 FL[2]}



static void Test_BFu16ll_L_L()
{
  {
    init_simple_test("BFu16ll_L_L");
    static STRUCT_IF_C BFu16ll_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_L, BFu16ll_L_L)
//============================================================================


struct  BFu16ll_L_S  {
  __tsu64 v1:16;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu16ll_L_S) C1{ FL:16 FL Fs}



static void Test_BFu16ll_L_S()
{
  {
    init_simple_test("BFu16ll_L_S");
    static STRUCT_IF_C BFu16ll_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_S, BFu16ll_L_S)
//============================================================================


struct  BFu16ll_L_Uc  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_L_Uc) C1{ FL:16 FL Fc}



static void Test_BFu16ll_L_Uc()
{
  {
    init_simple_test("BFu16ll_L_Uc");
    static STRUCT_IF_C BFu16ll_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_Uc, BFu16ll_L_Uc)
//============================================================================


struct  BFu16ll_L_Ui  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_L_Ui) C1{ FL:16 FL Fi}



static void Test_BFu16ll_L_Ui()
{
  {
    init_simple_test("BFu16ll_L_Ui");
    static STRUCT_IF_C BFu16ll_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_Ui, BFu16ll_L_Ui)
//============================================================================


struct  BFu16ll_L_Ul  {
  __tsu64 v1:16;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_L_Ul) C1{ FL:16 FL[2]}



static void Test_BFu16ll_L_Ul()
{
  {
    init_simple_test("BFu16ll_L_Ul");
    static STRUCT_IF_C BFu16ll_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_Ul, BFu16ll_L_Ul)
//============================================================================


struct  BFu16ll_L_Us  {
  __tsu64 v1:16;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_L_Us) C1{ FL:16 FL Fs}



static void Test_BFu16ll_L_Us()
{
  {
    init_simple_test("BFu16ll_L_Us");
    static STRUCT_IF_C BFu16ll_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_Us, BFu16ll_L_Us)
//============================================================================


struct  BFu16ll_L_Vp  {
  __tsu64 v1:16;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu16ll_L_Vp) C1{ FL:16 FL Fp}



static void Test_BFu16ll_L_Vp()
{
  {
    init_simple_test("BFu16ll_L_Vp");
    static STRUCT_IF_C BFu16ll_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_L_Vp, BFu16ll_L_Vp)
//============================================================================


struct  BFu16ll_S  {
  __tsu64 v1:16;
  short v2;
};
//SIG(1 BFu16ll_S) C1{ FL:16 Fs}



static void Test_BFu16ll_S()
{
  {
    init_simple_test("BFu16ll_S");
    static STRUCT_IF_C BFu16ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S");
    check_field_offset(lv, v2, 2, "BFu16ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S, BFu16ll_S)
//============================================================================


struct  BFu16ll_S_BFu15i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_S_BFu15i) C1{ FL:16 Fs Fi:15}



static void Test_BFu16ll_S_BFu15i()
{
  {
    init_simple_test("BFu16ll_S_BFu15i");
    static STRUCT_IF_C BFu16ll_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu15i, BFu16ll_S_BFu15i)
//============================================================================


struct  BFu16ll_S_BFu15ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_S_BFu15ll) C1{ FL:16 Fs FL:15}



static void Test_BFu16ll_S_BFu15ll()
{
  {
    init_simple_test("BFu16ll_S_BFu15ll");
    static STRUCT_IF_C BFu16ll_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu15ll, BFu16ll_S_BFu15ll)
//============================================================================


struct  BFu16ll_S_BFu15s  {
  __tsu64 v1:16;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_S_BFu15s) C1{ FL:16 Fs Fs:15}



static void Test_BFu16ll_S_BFu15s()
{
  {
    init_simple_test("BFu16ll_S_BFu15s");
    static STRUCT_IF_C BFu16ll_S_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu15s, BFu16ll_S_BFu15s)
//============================================================================


struct  BFu16ll_S_BFu16i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_S_BFu16i) C1{ FL:16 Fs Fi:16}



static void Test_BFu16ll_S_BFu16i()
{
  {
    init_simple_test("BFu16ll_S_BFu16i");
    static STRUCT_IF_C BFu16ll_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu16i, BFu16ll_S_BFu16i)
//============================================================================


struct  BFu16ll_S_BFu16ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_S_BFu16ll) C1{ FL:16 Fs FL:16}



static void Test_BFu16ll_S_BFu16ll()
{
  {
    init_simple_test("BFu16ll_S_BFu16ll");
    static STRUCT_IF_C BFu16ll_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu16ll, BFu16ll_S_BFu16ll)
//============================================================================


struct  BFu16ll_S_BFu16s  {
  __tsu64 v1:16;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_S_BFu16s) C1{ FL:16 Fs Fs:16}



static void Test_BFu16ll_S_BFu16s()
{
  {
    init_simple_test("BFu16ll_S_BFu16s");
    static STRUCT_IF_C BFu16ll_S_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu16s, BFu16ll_S_BFu16s)
//============================================================================


struct  BFu16ll_S_BFu17i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_S_BFu17i) C1{ FL:16 Fs Fi:17}



static void Test_BFu16ll_S_BFu17i()
{
  {
    init_simple_test("BFu16ll_S_BFu17i");
    static STRUCT_IF_C BFu16ll_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu17i, BFu16ll_S_BFu17i)
//============================================================================


struct  BFu16ll_S_BFu17ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_S_BFu17ll) C1{ FL:16 Fs FL:17}



static void Test_BFu16ll_S_BFu17ll()
{
  {
    init_simple_test("BFu16ll_S_BFu17ll");
    static STRUCT_IF_C BFu16ll_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu17ll, BFu16ll_S_BFu17ll)
//============================================================================


struct  BFu16ll_S_BFu1c  {
  __tsu64 v1:16;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_S_BFu1c) C1{ FL:16 Fs Fc:1}



static void Test_BFu16ll_S_BFu1c()
{
  {
    init_simple_test("BFu16ll_S_BFu1c");
    static STRUCT_IF_C BFu16ll_S_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16ll_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu1c, BFu16ll_S_BFu1c)
//============================================================================


struct  BFu16ll_S_BFu1i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_S_BFu1i) C1{ FL:16 Fs Fi:1}



static void Test_BFu16ll_S_BFu1i()
{
  {
    init_simple_test("BFu16ll_S_BFu1i");
    static STRUCT_IF_C BFu16ll_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16ll_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu1i, BFu16ll_S_BFu1i)
//============================================================================


struct  BFu16ll_S_BFu1ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_S_BFu1ll) C1{ FL:16 Fs FL:1}



static void Test_BFu16ll_S_BFu1ll()
{
  {
    init_simple_test("BFu16ll_S_BFu1ll");
    static STRUCT_IF_C BFu16ll_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16ll_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu1ll, BFu16ll_S_BFu1ll)
//============================================================================


struct  BFu16ll_S_BFu1s  {
  __tsu64 v1:16;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_S_BFu1s) C1{ FL:16 Fs Fs:1}



static void Test_BFu16ll_S_BFu1s()
{
  {
    init_simple_test("BFu16ll_S_BFu1s");
    static STRUCT_IF_C BFu16ll_S_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16ll_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu1s, BFu16ll_S_BFu1s)
//============================================================================


struct  BFu16ll_S_BFu31i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_S_BFu31i) C1{ FL:16 Fs Fi:31}



static void Test_BFu16ll_S_BFu31i()
{
  {
    init_simple_test("BFu16ll_S_BFu31i");
    static STRUCT_IF_C BFu16ll_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu31i, BFu16ll_S_BFu31i)
//============================================================================


struct  BFu16ll_S_BFu31ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_S_BFu31ll) C1{ FL:16 Fs FL:31}



static void Test_BFu16ll_S_BFu31ll()
{
  {
    init_simple_test("BFu16ll_S_BFu31ll");
    static STRUCT_IF_C BFu16ll_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu31ll, BFu16ll_S_BFu31ll)
//============================================================================


struct  BFu16ll_S_BFu32i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_S_BFu32i) C1{ FL:16 Fs Fi:32}



static void Test_BFu16ll_S_BFu32i()
{
  {
    init_simple_test("BFu16ll_S_BFu32i");
    static STRUCT_IF_C BFu16ll_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu32i, BFu16ll_S_BFu32i)
//============================================================================


struct  BFu16ll_S_BFu32ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_S_BFu32ll) C1{ FL:16 Fs FL:32}



static void Test_BFu16ll_S_BFu32ll()
{
  {
    init_simple_test("BFu16ll_S_BFu32ll");
    static STRUCT_IF_C BFu16ll_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu32ll, BFu16ll_S_BFu32ll)
//============================================================================


struct  BFu16ll_S_BFu33  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_S_BFu33) C1{ FL:16 Fs FL:33}



static void Test_BFu16ll_S_BFu33()
{
  {
    init_simple_test("BFu16ll_S_BFu33");
    static STRUCT_IF_C BFu16ll_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu33");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu16ll_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu16ll_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu33, BFu16ll_S_BFu33)
//============================================================================


struct  BFu16ll_S_BFu7c  {
  __tsu64 v1:16;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_S_BFu7c) C1{ FL:16 Fs Fc:7}



static void Test_BFu16ll_S_BFu7c()
{
  {
    init_simple_test("BFu16ll_S_BFu7c");
    static STRUCT_IF_C BFu16ll_S_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16ll_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16ll_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu7c, BFu16ll_S_BFu7c)
//============================================================================


struct  BFu16ll_S_BFu7i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_S_BFu7i) C1{ FL:16 Fs Fi:7}



static void Test_BFu16ll_S_BFu7i()
{
  {
    init_simple_test("BFu16ll_S_BFu7i");
    static STRUCT_IF_C BFu16ll_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16ll_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16ll_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu7i, BFu16ll_S_BFu7i)
//============================================================================


struct  BFu16ll_S_BFu7ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_S_BFu7ll) C1{ FL:16 Fs FL:7}



static void Test_BFu16ll_S_BFu7ll()
{
  {
    init_simple_test("BFu16ll_S_BFu7ll");
    static STRUCT_IF_C BFu16ll_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16ll_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16ll_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu7ll, BFu16ll_S_BFu7ll)
//============================================================================


struct  BFu16ll_S_BFu7s  {
  __tsu64 v1:16;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_S_BFu7s) C1{ FL:16 Fs Fs:7}



static void Test_BFu16ll_S_BFu7s()
{
  {
    init_simple_test("BFu16ll_S_BFu7s");
    static STRUCT_IF_C BFu16ll_S_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16ll_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16ll_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu7s, BFu16ll_S_BFu7s)
//============================================================================


struct  BFu16ll_S_BFu8c  {
  __tsu64 v1:16;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_S_BFu8c) C1{ FL:16 Fs Fc:8}



static void Test_BFu16ll_S_BFu8c()
{
  {
    init_simple_test("BFu16ll_S_BFu8c");
    static STRUCT_IF_C BFu16ll_S_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu8c, BFu16ll_S_BFu8c)
//============================================================================


struct  BFu16ll_S_BFu8i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_S_BFu8i) C1{ FL:16 Fs Fi:8}



static void Test_BFu16ll_S_BFu8i()
{
  {
    init_simple_test("BFu16ll_S_BFu8i");
    static STRUCT_IF_C BFu16ll_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu8i, BFu16ll_S_BFu8i)
//============================================================================


struct  BFu16ll_S_BFu8ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_S_BFu8ll) C1{ FL:16 Fs FL:8}



static void Test_BFu16ll_S_BFu8ll()
{
  {
    init_simple_test("BFu16ll_S_BFu8ll");
    static STRUCT_IF_C BFu16ll_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu8ll, BFu16ll_S_BFu8ll)
//============================================================================


struct  BFu16ll_S_BFu8s  {
  __tsu64 v1:16;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_S_BFu8s) C1{ FL:16 Fs Fs:8}



static void Test_BFu16ll_S_BFu8s()
{
  {
    init_simple_test("BFu16ll_S_BFu8s");
    static STRUCT_IF_C BFu16ll_S_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu8s, BFu16ll_S_BFu8s)
//============================================================================


struct  BFu16ll_S_BFu9i  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_S_BFu9i) C1{ FL:16 Fs Fi:9}



static void Test_BFu16ll_S_BFu9i()
{
  {
    init_simple_test("BFu16ll_S_BFu9i");
    static STRUCT_IF_C BFu16ll_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu9i, BFu16ll_S_BFu9i)
//============================================================================


struct  BFu16ll_S_BFu9ll  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_S_BFu9ll) C1{ FL:16 Fs FL:9}



static void Test_BFu16ll_S_BFu9ll()
{
  {
    init_simple_test("BFu16ll_S_BFu9ll");
    static STRUCT_IF_C BFu16ll_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu9ll, BFu16ll_S_BFu9ll)
//============================================================================


struct  BFu16ll_S_BFu9s  {
  __tsu64 v1:16;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_S_BFu9s) C1{ FL:16 Fs Fs:9}



static void Test_BFu16ll_S_BFu9s()
{
  {
    init_simple_test("BFu16ll_S_BFu9s");
    static STRUCT_IF_C BFu16ll_S_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16ll_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_BFu9s, BFu16ll_S_BFu9s)
//============================================================================


struct  BFu16ll_S_C  {
  __tsu64 v1:16;
  short v2;
  char v3;
};
//SIG(1 BFu16ll_S_C) C1{ FL:16 Fs Fc}



static void Test_BFu16ll_S_C()
{
  {
    init_simple_test("BFu16ll_S_C");
    static STRUCT_IF_C BFu16ll_S_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_C");
    check_field_offset(lv, v2, 2, "BFu16ll_S_C.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_C, BFu16ll_S_C)
//============================================================================


struct  BFu16ll_S_D  {
  __tsu64 v1:16;
  short v2;
  double v3;
};
//SIG(1 BFu16ll_S_D) C1{ FL:16 Fs FL}



static void Test_BFu16ll_S_D()
{
  {
    init_simple_test("BFu16ll_S_D");
    static STRUCT_IF_C BFu16ll_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_D");
    check_field_offset(lv, v2, 2, "BFu16ll_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_D, BFu16ll_S_D)
//============================================================================


struct  BFu16ll_S_F  {
  __tsu64 v1:16;
  short v2;
  float v3;
};
//SIG(1 BFu16ll_S_F) C1{ FL:16 Fs Fi}



static void Test_BFu16ll_S_F()
{
  {
    init_simple_test("BFu16ll_S_F");
    static STRUCT_IF_C BFu16ll_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_F");
    check_field_offset(lv, v2, 2, "BFu16ll_S_F.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_F, BFu16ll_S_F)
//============================================================================


struct  BFu16ll_S_I  {
  __tsu64 v1:16;
  short v2;
  int v3;
};
//SIG(1 BFu16ll_S_I) C1{ FL:16 Fs Fi}



static void Test_BFu16ll_S_I()
{
  {
    init_simple_test("BFu16ll_S_I");
    static STRUCT_IF_C BFu16ll_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_I");
    check_field_offset(lv, v2, 2, "BFu16ll_S_I.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_I, BFu16ll_S_I)
//============================================================================


struct  BFu16ll_S_Ip  {
  __tsu64 v1:16;
  short v2;
  int *v3;
};
//SIG(1 BFu16ll_S_Ip) C1{ FL:16 Fs Fp}



static void Test_BFu16ll_S_Ip()
{
  {
    init_simple_test("BFu16ll_S_Ip");
    static STRUCT_IF_C BFu16ll_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_Ip");
    check_field_offset(lv, v2, 2, "BFu16ll_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_Ip, BFu16ll_S_Ip)
//============================================================================


struct  BFu16ll_S_L  {
  __tsu64 v1:16;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_S_L) C1{ FL:16 Fs FL}



static void Test_BFu16ll_S_L()
{
  {
    init_simple_test("BFu16ll_S_L");
    static STRUCT_IF_C BFu16ll_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_L");
    check_field_offset(lv, v2, 2, "BFu16ll_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_L, BFu16ll_S_L)
//============================================================================


struct  BFu16ll_S_S  {
  __tsu64 v1:16;
  short v2;
  short v3;
};
//SIG(1 BFu16ll_S_S) C1{ FL:16 Fs[2]}



static void Test_BFu16ll_S_S()
{
  {
    init_simple_test("BFu16ll_S_S");
    static STRUCT_IF_C BFu16ll_S_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_S");
    check_field_offset(lv, v2, 2, "BFu16ll_S_S.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_S, BFu16ll_S_S)
//============================================================================


struct  BFu16ll_S_Uc  {
  __tsu64 v1:16;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_S_Uc) C1{ FL:16 Fs Fc}



static void Test_BFu16ll_S_Uc()
{
  {
    init_simple_test("BFu16ll_S_Uc");
    static STRUCT_IF_C BFu16ll_S_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_Uc");
    check_field_offset(lv, v2, 2, "BFu16ll_S_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_Uc, BFu16ll_S_Uc)
//============================================================================


struct  BFu16ll_S_Ui  {
  __tsu64 v1:16;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_S_Ui) C1{ FL:16 Fs Fi}



static void Test_BFu16ll_S_Ui()
{
  {
    init_simple_test("BFu16ll_S_Ui");
    static STRUCT_IF_C BFu16ll_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_Ui");
    check_field_offset(lv, v2, 2, "BFu16ll_S_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_Ui, BFu16ll_S_Ui)
//============================================================================


struct  BFu16ll_S_Ul  {
  __tsu64 v1:16;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_S_Ul) C1{ FL:16 Fs FL}



static void Test_BFu16ll_S_Ul()
{
  {
    init_simple_test("BFu16ll_S_Ul");
    static STRUCT_IF_C BFu16ll_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_Ul");
    check_field_offset(lv, v2, 2, "BFu16ll_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_Ul, BFu16ll_S_Ul)
//============================================================================


struct  BFu16ll_S_Us  {
  __tsu64 v1:16;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_S_Us) C1{ FL:16 Fs[2]}



static void Test_BFu16ll_S_Us()
{
  {
    init_simple_test("BFu16ll_S_Us");
    static STRUCT_IF_C BFu16ll_S_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_Us");
    check_field_offset(lv, v2, 2, "BFu16ll_S_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_Us, BFu16ll_S_Us)
//============================================================================


struct  BFu16ll_S_Vp  {
  __tsu64 v1:16;
  short v2;
  void *v3;
};
//SIG(1 BFu16ll_S_Vp) C1{ FL:16 Fs Fp}



static void Test_BFu16ll_S_Vp()
{
  {
    init_simple_test("BFu16ll_S_Vp");
    static STRUCT_IF_C BFu16ll_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_Vp");
    check_field_offset(lv, v2, 2, "BFu16ll_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_S_Vp, BFu16ll_S_Vp)
//============================================================================


struct  BFu16ll_Uc  {
  __tsu64 v1:16;
  unsigned char v2;
};
//SIG(1 BFu16ll_Uc) C1{ FL:16 Fc}



static void Test_BFu16ll_Uc()
{
  {
    init_simple_test("BFu16ll_Uc");
    static STRUCT_IF_C BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc, BFu16ll_Uc)
//============================================================================


struct  BFu16ll_Uc_BFu15i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_Uc_BFu15i) C1{ FL:16 Fc Fi:15}



static void Test_BFu16ll_Uc_BFu15i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu15i");
    static STRUCT_IF_C BFu16ll_Uc_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_Uc_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu15i, BFu16ll_Uc_BFu15i)
//============================================================================


struct  BFu16ll_Uc_BFu15ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_Uc_BFu15ll) C1{ FL:16 Fc FL:15}



static void Test_BFu16ll_Uc_BFu15ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu15ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16ll_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16ll_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu15ll, BFu16ll_Uc_BFu15ll)
//============================================================================


struct  BFu16ll_Uc_BFu15s  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_Uc_BFu15s) C1{ FL:16 Fc Fs:15}



static void Test_BFu16ll_Uc_BFu15s()
{
  {
    init_simple_test("BFu16ll_Uc_BFu15s");
    static STRUCT_IF_C BFu16ll_Uc_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_Uc_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu15s, BFu16ll_Uc_BFu15s)
//============================================================================


struct  BFu16ll_Uc_BFu16i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_Uc_BFu16i) C1{ FL:16 Fc Fi:16}



static void Test_BFu16ll_Uc_BFu16i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu16i");
    static STRUCT_IF_C BFu16ll_Uc_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_Uc_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu16i, BFu16ll_Uc_BFu16i)
//============================================================================


struct  BFu16ll_Uc_BFu16ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_Uc_BFu16ll) C1{ FL:16 Fc FL:16}



static void Test_BFu16ll_Uc_BFu16ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu16ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16ll_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu16ll, BFu16ll_Uc_BFu16ll)
//============================================================================


struct  BFu16ll_Uc_BFu16s  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_Uc_BFu16s) C1{ FL:16 Fc Fs:16}



static void Test_BFu16ll_Uc_BFu16s()
{
  {
    init_simple_test("BFu16ll_Uc_BFu16s");
    static STRUCT_IF_C BFu16ll_Uc_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_Uc_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu16s, BFu16ll_Uc_BFu16s)
//============================================================================


struct  BFu16ll_Uc_BFu17i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_Uc_BFu17i) C1{ FL:16 Fc Fi:17}



static void Test_BFu16ll_Uc_BFu17i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu17i");
    static STRUCT_IF_C BFu16ll_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu17i, BFu16ll_Uc_BFu17i)
//============================================================================


struct  BFu16ll_Uc_BFu17ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_Uc_BFu17ll) C1{ FL:16 Fc FL:17}



static void Test_BFu16ll_Uc_BFu17ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu17ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16ll_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16ll_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu17ll, BFu16ll_Uc_BFu17ll)
//============================================================================


struct  BFu16ll_Uc_BFu1c  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_Uc_BFu1c) C1{ FL:16 Fc Fc:1}



static void Test_BFu16ll_Uc_BFu1c()
{
  {
    init_simple_test("BFu16ll_Uc_BFu1c");
    static STRUCT_IF_C BFu16ll_Uc_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu1c, BFu16ll_Uc_BFu1c)
//============================================================================


struct  BFu16ll_Uc_BFu1i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_Uc_BFu1i) C1{ FL:16 Fc Fi:1}



static void Test_BFu16ll_Uc_BFu1i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu1i");
    static STRUCT_IF_C BFu16ll_Uc_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu1i, BFu16ll_Uc_BFu1i)
//============================================================================


struct  BFu16ll_Uc_BFu1ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_Uc_BFu1ll) C1{ FL:16 Fc FL:1}



static void Test_BFu16ll_Uc_BFu1ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu1ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu1ll, BFu16ll_Uc_BFu1ll)
//============================================================================


struct  BFu16ll_Uc_BFu1s  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_Uc_BFu1s) C1{ FL:16 Fc Fs:1}



static void Test_BFu16ll_Uc_BFu1s()
{
  {
    init_simple_test("BFu16ll_Uc_BFu1s");
    static STRUCT_IF_C BFu16ll_Uc_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu1s, BFu16ll_Uc_BFu1s)
//============================================================================


struct  BFu16ll_Uc_BFu31i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_Uc_BFu31i) C1{ FL:16 Fc Fi:31}



static void Test_BFu16ll_Uc_BFu31i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu31i");
    static STRUCT_IF_C BFu16ll_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu31i, BFu16ll_Uc_BFu31i)
//============================================================================


struct  BFu16ll_Uc_BFu31ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_Uc_BFu31ll) C1{ FL:16 Fc FL:31}



static void Test_BFu16ll_Uc_BFu31ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu31ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16ll_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16ll_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu31ll, BFu16ll_Uc_BFu31ll)
//============================================================================


struct  BFu16ll_Uc_BFu32i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_Uc_BFu32i) C1{ FL:16 Fc Fi:32}



static void Test_BFu16ll_Uc_BFu32i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu32i");
    static STRUCT_IF_C BFu16ll_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu32i, BFu16ll_Uc_BFu32i)
//============================================================================


struct  BFu16ll_Uc_BFu32ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_Uc_BFu32ll) C1{ FL:16 Fc FL:32}



static void Test_BFu16ll_Uc_BFu32ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu32ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16ll_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16ll_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu32ll, BFu16ll_Uc_BFu32ll)
//============================================================================


struct  BFu16ll_Uc_BFu33  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_Uc_BFu33) C1{ FL:16 Fc FL:33}



static void Test_BFu16ll_Uc_BFu33()
{
  {
    init_simple_test("BFu16ll_Uc_BFu33");
    static STRUCT_IF_C BFu16ll_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu33");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16ll_Uc_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16ll_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu33, BFu16ll_Uc_BFu33)
//============================================================================


struct  BFu16ll_Uc_BFu7c  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_Uc_BFu7c) C1{ FL:16 Fc Fc:7}



static void Test_BFu16ll_Uc_BFu7c()
{
  {
    init_simple_test("BFu16ll_Uc_BFu7c");
    static STRUCT_IF_C BFu16ll_Uc_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_Uc_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu7c, BFu16ll_Uc_BFu7c)
//============================================================================


struct  BFu16ll_Uc_BFu7i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_Uc_BFu7i) C1{ FL:16 Fc Fi:7}



static void Test_BFu16ll_Uc_BFu7i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu7i");
    static STRUCT_IF_C BFu16ll_Uc_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_Uc_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu7i, BFu16ll_Uc_BFu7i)
//============================================================================


struct  BFu16ll_Uc_BFu7ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_Uc_BFu7ll) C1{ FL:16 Fc FL:7}



static void Test_BFu16ll_Uc_BFu7ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu7ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu7ll, BFu16ll_Uc_BFu7ll)
//============================================================================


struct  BFu16ll_Uc_BFu7s  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_Uc_BFu7s) C1{ FL:16 Fc Fs:7}



static void Test_BFu16ll_Uc_BFu7s()
{
  {
    init_simple_test("BFu16ll_Uc_BFu7s");
    static STRUCT_IF_C BFu16ll_Uc_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_Uc_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu7s, BFu16ll_Uc_BFu7s)
//============================================================================


struct  BFu16ll_Uc_BFu8c  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_Uc_BFu8c) C1{ FL:16 Fc Fc:8}



static void Test_BFu16ll_Uc_BFu8c()
{
  {
    init_simple_test("BFu16ll_Uc_BFu8c");
    static STRUCT_IF_C BFu16ll_Uc_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_Uc_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu8c, BFu16ll_Uc_BFu8c)
//============================================================================


struct  BFu16ll_Uc_BFu8i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_Uc_BFu8i) C1{ FL:16 Fc Fi:8}



static void Test_BFu16ll_Uc_BFu8i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu8i");
    static STRUCT_IF_C BFu16ll_Uc_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_Uc_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu8i, BFu16ll_Uc_BFu8i)
//============================================================================


struct  BFu16ll_Uc_BFu8ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_Uc_BFu8ll) C1{ FL:16 Fc FL:8}



static void Test_BFu16ll_Uc_BFu8ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu8ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu8ll, BFu16ll_Uc_BFu8ll)
//============================================================================


struct  BFu16ll_Uc_BFu8s  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_Uc_BFu8s) C1{ FL:16 Fc Fs:8}



static void Test_BFu16ll_Uc_BFu8s()
{
  {
    init_simple_test("BFu16ll_Uc_BFu8s");
    static STRUCT_IF_C BFu16ll_Uc_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_Uc_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu8s, BFu16ll_Uc_BFu8s)
//============================================================================


struct  BFu16ll_Uc_BFu9i  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_Uc_BFu9i) C1{ FL:16 Fc Fi:9}



static void Test_BFu16ll_Uc_BFu9i()
{
  {
    init_simple_test("BFu16ll_Uc_BFu9i");
    static STRUCT_IF_C BFu16ll_Uc_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_Uc_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu9i, BFu16ll_Uc_BFu9i)
//============================================================================


struct  BFu16ll_Uc_BFu9ll  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_Uc_BFu9ll) C1{ FL:16 Fc FL:9}



static void Test_BFu16ll_Uc_BFu9ll()
{
  {
    init_simple_test("BFu16ll_Uc_BFu9ll");
    static STRUCT_IF_C BFu16ll_Uc_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16ll_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16ll_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu9ll, BFu16ll_Uc_BFu9ll)
//============================================================================


struct  BFu16ll_Uc_BFu9s  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_Uc_BFu9s) C1{ FL:16 Fc Fs:9}



static void Test_BFu16ll_Uc_BFu9s()
{
  {
    init_simple_test("BFu16ll_Uc_BFu9s");
    static STRUCT_IF_C BFu16ll_Uc_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_Uc_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_BFu9s, BFu16ll_Uc_BFu9s)
//============================================================================


struct  BFu16ll_Uc_C  {
  __tsu64 v1:16;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu16ll_Uc_C) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_Uc_C()
{
  {
    init_simple_test("BFu16ll_Uc_C");
    static STRUCT_IF_C BFu16ll_Uc_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_C");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_C.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_C, BFu16ll_Uc_C)
//============================================================================


struct  BFu16ll_Uc_D  {
  __tsu64 v1:16;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu16ll_Uc_D) C1{ FL:16 Fc FL}



static void Test_BFu16ll_Uc_D()
{
  {
    init_simple_test("BFu16ll_Uc_D");
    static STRUCT_IF_C BFu16ll_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_D");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_D, BFu16ll_Uc_D)
//============================================================================


struct  BFu16ll_Uc_F  {
  __tsu64 v1:16;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu16ll_Uc_F) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_Uc_F()
{
  {
    init_simple_test("BFu16ll_Uc_F");
    static STRUCT_IF_C BFu16ll_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_F");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_F, BFu16ll_Uc_F)
//============================================================================


struct  BFu16ll_Uc_I  {
  __tsu64 v1:16;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu16ll_Uc_I) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_Uc_I()
{
  {
    init_simple_test("BFu16ll_Uc_I");
    static STRUCT_IF_C BFu16ll_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_I");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_I, BFu16ll_Uc_I)
//============================================================================


struct  BFu16ll_Uc_Ip  {
  __tsu64 v1:16;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu16ll_Uc_Ip) C1{ FL:16 Fc Fp}



static void Test_BFu16ll_Uc_Ip()
{
  {
    init_simple_test("BFu16ll_Uc_Ip");
    static STRUCT_IF_C BFu16ll_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_Ip");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_Ip, BFu16ll_Uc_Ip)
//============================================================================


struct  BFu16ll_Uc_L  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_Uc_L) C1{ FL:16 Fc FL}



static void Test_BFu16ll_Uc_L()
{
  {
    init_simple_test("BFu16ll_Uc_L");
    static STRUCT_IF_C BFu16ll_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_L");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_L, BFu16ll_Uc_L)
//============================================================================


struct  BFu16ll_Uc_S  {
  __tsu64 v1:16;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu16ll_Uc_S) C1{ FL:16 Fc Fs}



static void Test_BFu16ll_Uc_S()
{
  {
    init_simple_test("BFu16ll_Uc_S");
    static STRUCT_IF_C BFu16ll_Uc_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_S");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_S.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_S, BFu16ll_Uc_S)
//============================================================================


struct  BFu16ll_Uc_Uc  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_Uc_Uc) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_Uc_Uc()
{
  {
    init_simple_test("BFu16ll_Uc_Uc");
    static STRUCT_IF_C BFu16ll_Uc_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_Uc");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_Uc, BFu16ll_Uc_Uc)
//============================================================================


struct  BFu16ll_Uc_Ui  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_Uc_Ui) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_Uc_Ui()
{
  {
    init_simple_test("BFu16ll_Uc_Ui");
    static STRUCT_IF_C BFu16ll_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_Ui");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_Ui, BFu16ll_Uc_Ui)
//============================================================================


struct  BFu16ll_Uc_Ul  {
  __tsu64 v1:16;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_Uc_Ul) C1{ FL:16 Fc FL}



static void Test_BFu16ll_Uc_Ul()
{
  {
    init_simple_test("BFu16ll_Uc_Ul");
    static STRUCT_IF_C BFu16ll_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_Ul");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_Ul, BFu16ll_Uc_Ul)
//============================================================================


struct  BFu16ll_Uc_Us  {
  __tsu64 v1:16;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_Uc_Us) C1{ FL:16 Fc Fs}



static void Test_BFu16ll_Uc_Us()
{
  {
    init_simple_test("BFu16ll_Uc_Us");
    static STRUCT_IF_C BFu16ll_Uc_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Uc_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_Us");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_Us, BFu16ll_Uc_Us)
//============================================================================


struct  BFu16ll_Uc_Vp  {
  __tsu64 v1:16;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu16ll_Uc_Vp) C1{ FL:16 Fc Fp}



static void Test_BFu16ll_Uc_Vp()
{
  {
    init_simple_test("BFu16ll_Uc_Vp");
    static STRUCT_IF_C BFu16ll_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_Vp");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Uc_Vp, BFu16ll_Uc_Vp)
//============================================================================


struct  BFu16ll_Ui  {
  __tsu64 v1:16;
  unsigned int v2;
};
//SIG(1 BFu16ll_Ui) C1{ FL:16 Fi}



static void Test_BFu16ll_Ui()
{
  {
    init_simple_test("BFu16ll_Ui");
    static STRUCT_IF_C BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui, BFu16ll_Ui)
//============================================================================


struct  BFu16ll_Ui_BFu15i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_Ui_BFu15i) C1{ FL:16 Fi Fi:15}



static void Test_BFu16ll_Ui_BFu15i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu15i");
    static STRUCT_IF_C BFu16ll_Ui_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu15i, BFu16ll_Ui_BFu15i)
//============================================================================


struct  BFu16ll_Ui_BFu15ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_Ui_BFu15ll) C1{ FL:16 Fi FL:15}



static void Test_BFu16ll_Ui_BFu15ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu15ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu15ll, BFu16ll_Ui_BFu15ll)
//============================================================================


struct  BFu16ll_Ui_BFu15s  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_Ui_BFu15s) C1{ FL:16 Fi Fs:15}



static void Test_BFu16ll_Ui_BFu15s()
{
  {
    init_simple_test("BFu16ll_Ui_BFu15s");
    static STRUCT_IF_C BFu16ll_Ui_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16ll_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16ll_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu15s, BFu16ll_Ui_BFu15s)
//============================================================================


struct  BFu16ll_Ui_BFu16i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_Ui_BFu16i) C1{ FL:16 Fi Fi:16}



static void Test_BFu16ll_Ui_BFu16i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu16i");
    static STRUCT_IF_C BFu16ll_Ui_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu16i, BFu16ll_Ui_BFu16i)
//============================================================================


struct  BFu16ll_Ui_BFu16ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_Ui_BFu16ll) C1{ FL:16 Fi FL:16}



static void Test_BFu16ll_Ui_BFu16ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu16ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu16ll, BFu16ll_Ui_BFu16ll)
//============================================================================


struct  BFu16ll_Ui_BFu16s  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_Ui_BFu16s) C1{ FL:16 Fi Fs:16}



static void Test_BFu16ll_Ui_BFu16s()
{
  {
    init_simple_test("BFu16ll_Ui_BFu16s");
    static STRUCT_IF_C BFu16ll_Ui_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16ll_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu16s, BFu16ll_Ui_BFu16s)
//============================================================================


struct  BFu16ll_Ui_BFu17i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_Ui_BFu17i) C1{ FL:16 Fi Fi:17}



static void Test_BFu16ll_Ui_BFu17i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu17i");
    static STRUCT_IF_C BFu16ll_Ui_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu17i, BFu16ll_Ui_BFu17i)
//============================================================================


struct  BFu16ll_Ui_BFu17ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_Ui_BFu17ll) C1{ FL:16 Fi FL:17}



static void Test_BFu16ll_Ui_BFu17ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu17ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16ll_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16ll_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu17ll, BFu16ll_Ui_BFu17ll)
//============================================================================


struct  BFu16ll_Ui_BFu1c  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_Ui_BFu1c) C1{ FL:16 Fi Fc:1}



static void Test_BFu16ll_Ui_BFu1c()
{
  {
    init_simple_test("BFu16ll_Ui_BFu1c");
    static STRUCT_IF_C BFu16ll_Ui_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu1c, BFu16ll_Ui_BFu1c)
//============================================================================


struct  BFu16ll_Ui_BFu1i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_Ui_BFu1i) C1{ FL:16 Fi Fi:1}



static void Test_BFu16ll_Ui_BFu1i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu1i");
    static STRUCT_IF_C BFu16ll_Ui_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu1i, BFu16ll_Ui_BFu1i)
//============================================================================


struct  BFu16ll_Ui_BFu1ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_Ui_BFu1ll) C1{ FL:16 Fi FL:1}



static void Test_BFu16ll_Ui_BFu1ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu1ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu1ll, BFu16ll_Ui_BFu1ll)
//============================================================================


struct  BFu16ll_Ui_BFu1s  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_Ui_BFu1s) C1{ FL:16 Fi Fs:1}



static void Test_BFu16ll_Ui_BFu1s()
{
  {
    init_simple_test("BFu16ll_Ui_BFu1s");
    static STRUCT_IF_C BFu16ll_Ui_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16ll_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu1s, BFu16ll_Ui_BFu1s)
//============================================================================


struct  BFu16ll_Ui_BFu31i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_Ui_BFu31i) C1{ FL:16 Fi Fi:31}



static void Test_BFu16ll_Ui_BFu31i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu31i");
    static STRUCT_IF_C BFu16ll_Ui_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu31i, BFu16ll_Ui_BFu31i)
//============================================================================


struct  BFu16ll_Ui_BFu31ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_Ui_BFu31ll) C1{ FL:16 Fi FL:31}



static void Test_BFu16ll_Ui_BFu31ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu31ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16ll_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16ll_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu31ll, BFu16ll_Ui_BFu31ll)
//============================================================================


struct  BFu16ll_Ui_BFu32i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_Ui_BFu32i) C1{ FL:16 Fi Fi:32}



static void Test_BFu16ll_Ui_BFu32i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu32i");
    static STRUCT_IF_C BFu16ll_Ui_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu32i, BFu16ll_Ui_BFu32i)
//============================================================================


struct  BFu16ll_Ui_BFu32ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_Ui_BFu32ll) C1{ FL:16 Fi FL:32}



static void Test_BFu16ll_Ui_BFu32ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu32ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16ll_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16ll_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu32ll, BFu16ll_Ui_BFu32ll)
//============================================================================


struct  BFu16ll_Ui_BFu33  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_Ui_BFu33) C1{ FL:16 Fi FL:33}



static void Test_BFu16ll_Ui_BFu33()
{
  {
    init_simple_test("BFu16ll_Ui_BFu33");
    static STRUCT_IF_C BFu16ll_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu16ll_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu16ll_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu33, BFu16ll_Ui_BFu33)
//============================================================================


struct  BFu16ll_Ui_BFu7c  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_Ui_BFu7c) C1{ FL:16 Fi Fc:7}



static void Test_BFu16ll_Ui_BFu7c()
{
  {
    init_simple_test("BFu16ll_Ui_BFu7c");
    static STRUCT_IF_C BFu16ll_Ui_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu7c, BFu16ll_Ui_BFu7c)
//============================================================================


struct  BFu16ll_Ui_BFu7i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_Ui_BFu7i) C1{ FL:16 Fi Fi:7}



static void Test_BFu16ll_Ui_BFu7i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu7i");
    static STRUCT_IF_C BFu16ll_Ui_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu7i, BFu16ll_Ui_BFu7i)
//============================================================================


struct  BFu16ll_Ui_BFu7ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_Ui_BFu7ll) C1{ FL:16 Fi FL:7}



static void Test_BFu16ll_Ui_BFu7ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu7ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu7ll, BFu16ll_Ui_BFu7ll)
//============================================================================


struct  BFu16ll_Ui_BFu7s  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_Ui_BFu7s) C1{ FL:16 Fi Fs:7}



static void Test_BFu16ll_Ui_BFu7s()
{
  {
    init_simple_test("BFu16ll_Ui_BFu7s");
    static STRUCT_IF_C BFu16ll_Ui_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16ll_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16ll_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu7s, BFu16ll_Ui_BFu7s)
//============================================================================


struct  BFu16ll_Ui_BFu8c  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_Ui_BFu8c) C1{ FL:16 Fi Fc:8}



static void Test_BFu16ll_Ui_BFu8c()
{
  {
    init_simple_test("BFu16ll_Ui_BFu8c");
    static STRUCT_IF_C BFu16ll_Ui_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu8c, BFu16ll_Ui_BFu8c)
//============================================================================


struct  BFu16ll_Ui_BFu8i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_Ui_BFu8i) C1{ FL:16 Fi Fi:8}



static void Test_BFu16ll_Ui_BFu8i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu8i");
    static STRUCT_IF_C BFu16ll_Ui_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu8i, BFu16ll_Ui_BFu8i)
//============================================================================


struct  BFu16ll_Ui_BFu8ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_Ui_BFu8ll) C1{ FL:16 Fi FL:8}



static void Test_BFu16ll_Ui_BFu8ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu8ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu8ll, BFu16ll_Ui_BFu8ll)
//============================================================================


struct  BFu16ll_Ui_BFu8s  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_Ui_BFu8s) C1{ FL:16 Fi Fs:8}



static void Test_BFu16ll_Ui_BFu8s()
{
  {
    init_simple_test("BFu16ll_Ui_BFu8s");
    static STRUCT_IF_C BFu16ll_Ui_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16ll_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16ll_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu8s, BFu16ll_Ui_BFu8s)
//============================================================================


struct  BFu16ll_Ui_BFu9i  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_Ui_BFu9i) C1{ FL:16 Fi Fi:9}



static void Test_BFu16ll_Ui_BFu9i()
{
  {
    init_simple_test("BFu16ll_Ui_BFu9i");
    static STRUCT_IF_C BFu16ll_Ui_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu9i, BFu16ll_Ui_BFu9i)
//============================================================================


struct  BFu16ll_Ui_BFu9ll  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_Ui_BFu9ll) C1{ FL:16 Fi FL:9}



static void Test_BFu16ll_Ui_BFu9ll()
{
  {
    init_simple_test("BFu16ll_Ui_BFu9ll");
    static STRUCT_IF_C BFu16ll_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu9ll, BFu16ll_Ui_BFu9ll)
//============================================================================


struct  BFu16ll_Ui_BFu9s  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_Ui_BFu9s) C1{ FL:16 Fi Fs:9}



static void Test_BFu16ll_Ui_BFu9s()
{
  {
    init_simple_test("BFu16ll_Ui_BFu9s");
    static STRUCT_IF_C BFu16ll_Ui_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16ll_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16ll_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_BFu9s, BFu16ll_Ui_BFu9s)
//============================================================================


struct  BFu16ll_Ui_C  {
  __tsu64 v1:16;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu16ll_Ui_C) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_Ui_C()
{
  {
    init_simple_test("BFu16ll_Ui_C");
    static STRUCT_IF_C BFu16ll_Ui_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_C");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_C, BFu16ll_Ui_C)
//============================================================================


struct  BFu16ll_Ui_D  {
  __tsu64 v1:16;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu16ll_Ui_D) C1{ FL:16 Fi FL}



static void Test_BFu16ll_Ui_D()
{
  {
    init_simple_test("BFu16ll_Ui_D");
    static STRUCT_IF_C BFu16ll_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_D");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_D, BFu16ll_Ui_D)
//============================================================================


struct  BFu16ll_Ui_F  {
  __tsu64 v1:16;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu16ll_Ui_F) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_Ui_F()
{
  {
    init_simple_test("BFu16ll_Ui_F");
    static STRUCT_IF_C BFu16ll_Ui_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_F");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_F, BFu16ll_Ui_F)
//============================================================================


struct  BFu16ll_Ui_I  {
  __tsu64 v1:16;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu16ll_Ui_I) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_Ui_I()
{
  {
    init_simple_test("BFu16ll_Ui_I");
    static STRUCT_IF_C BFu16ll_Ui_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_I");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_I, BFu16ll_Ui_I)
//============================================================================


struct  BFu16ll_Ui_Ip  {
  __tsu64 v1:16;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu16ll_Ui_Ip) C1{ FL:16 Fi Fp}



static void Test_BFu16ll_Ui_Ip()
{
  {
    init_simple_test("BFu16ll_Ui_Ip");
    static STRUCT_IF_C BFu16ll_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_Ip, BFu16ll_Ui_Ip)
//============================================================================


struct  BFu16ll_Ui_L  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_Ui_L) C1{ FL:16 Fi FL}



static void Test_BFu16ll_Ui_L()
{
  {
    init_simple_test("BFu16ll_Ui_L");
    static STRUCT_IF_C BFu16ll_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_L");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_L, BFu16ll_Ui_L)
//============================================================================


struct  BFu16ll_Ui_S  {
  __tsu64 v1:16;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu16ll_Ui_S) C1{ FL:16 Fi Fs}



static void Test_BFu16ll_Ui_S()
{
  {
    init_simple_test("BFu16ll_Ui_S");
    static STRUCT_IF_C BFu16ll_Ui_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_S");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_S, BFu16ll_Ui_S)
//============================================================================


struct  BFu16ll_Ui_Uc  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_Ui_Uc) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_Ui_Uc()
{
  {
    init_simple_test("BFu16ll_Ui_Uc");
    static STRUCT_IF_C BFu16ll_Ui_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_Uc, BFu16ll_Ui_Uc)
//============================================================================


struct  BFu16ll_Ui_Ui  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_Ui_Ui) C1{ FL:16 Fi[2]}



static void Test_BFu16ll_Ui_Ui()
{
  {
    init_simple_test("BFu16ll_Ui_Ui");
    static STRUCT_IF_C BFu16ll_Ui_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_Ui, BFu16ll_Ui_Ui)
//============================================================================


struct  BFu16ll_Ui_Ul  {
  __tsu64 v1:16;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_Ui_Ul) C1{ FL:16 Fi FL}



static void Test_BFu16ll_Ui_Ul()
{
  {
    init_simple_test("BFu16ll_Ui_Ul");
    static STRUCT_IF_C BFu16ll_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16ll_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_Ul, BFu16ll_Ui_Ul)
//============================================================================


struct  BFu16ll_Ui_Us  {
  __tsu64 v1:16;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_Ui_Us) C1{ FL:16 Fi Fs}



static void Test_BFu16ll_Ui_Us()
{
  {
    init_simple_test("BFu16ll_Ui_Us");
    static STRUCT_IF_C BFu16ll_Ui_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_Us, BFu16ll_Ui_Us)
//============================================================================


struct  BFu16ll_Ui_Vp  {
  __tsu64 v1:16;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu16ll_Ui_Vp) C1{ FL:16 Fi Fp}



static void Test_BFu16ll_Ui_Vp()
{
  {
    init_simple_test("BFu16ll_Ui_Vp");
    static STRUCT_IF_C BFu16ll_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ui_Vp, BFu16ll_Ui_Vp)
//============================================================================


struct  BFu16ll_Ul  {
  __tsu64 v1:16;
  __tsu64 v2;
};
//SIG(1 BFu16ll_Ul) C1{ FL:16 FL}



static void Test_BFu16ll_Ul()
{
  {
    init_simple_test("BFu16ll_Ul");
    static STRUCT_IF_C BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul, BFu16ll_Ul)
//============================================================================


struct  BFu16ll_Ul_BFu15i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_Ul_BFu15i) C1{ FL:16 FL Fi:15}



static void Test_BFu16ll_Ul_BFu15i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu15i");
    static STRUCT_IF_C BFu16ll_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu15i, BFu16ll_Ul_BFu15i)
//============================================================================


struct  BFu16ll_Ul_BFu15ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_Ul_BFu15ll) C1{ FL:16 FL FL:15}



static void Test_BFu16ll_Ul_BFu15ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu15ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu15ll, BFu16ll_Ul_BFu15ll)
//============================================================================


struct  BFu16ll_Ul_BFu15s  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_Ul_BFu15s) C1{ FL:16 FL Fs:15}



static void Test_BFu16ll_Ul_BFu15s()
{
  {
    init_simple_test("BFu16ll_Ul_BFu15s");
    static STRUCT_IF_C BFu16ll_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16ll_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16ll_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu15s, BFu16ll_Ul_BFu15s)
//============================================================================


struct  BFu16ll_Ul_BFu16i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_Ul_BFu16i) C1{ FL:16 FL Fi:16}



static void Test_BFu16ll_Ul_BFu16i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu16i");
    static STRUCT_IF_C BFu16ll_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu16i, BFu16ll_Ul_BFu16i)
//============================================================================


struct  BFu16ll_Ul_BFu16ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_Ul_BFu16ll) C1{ FL:16 FL FL:16}



static void Test_BFu16ll_Ul_BFu16ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu16ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu16ll, BFu16ll_Ul_BFu16ll)
//============================================================================


struct  BFu16ll_Ul_BFu16s  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_Ul_BFu16s) C1{ FL:16 FL Fs:16}



static void Test_BFu16ll_Ul_BFu16s()
{
  {
    init_simple_test("BFu16ll_Ul_BFu16s");
    static STRUCT_IF_C BFu16ll_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16ll_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu16s, BFu16ll_Ul_BFu16s)
//============================================================================


struct  BFu16ll_Ul_BFu17i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_Ul_BFu17i) C1{ FL:16 FL Fi:17}



static void Test_BFu16ll_Ul_BFu17i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu17i");
    static STRUCT_IF_C BFu16ll_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16ll_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16ll_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu17i, BFu16ll_Ul_BFu17i)
//============================================================================


struct  BFu16ll_Ul_BFu17ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_Ul_BFu17ll) C1{ FL:16 FL FL:17}



static void Test_BFu16ll_Ul_BFu17ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu17ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16ll_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16ll_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu17ll, BFu16ll_Ul_BFu17ll)
//============================================================================


struct  BFu16ll_Ul_BFu1c  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_Ul_BFu1c) C1{ FL:16 FL Fc:1}



static void Test_BFu16ll_Ul_BFu1c()
{
  {
    init_simple_test("BFu16ll_Ul_BFu1c");
    static STRUCT_IF_C BFu16ll_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu1c, BFu16ll_Ul_BFu1c)
//============================================================================


struct  BFu16ll_Ul_BFu1i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_Ul_BFu1i) C1{ FL:16 FL Fi:1}



static void Test_BFu16ll_Ul_BFu1i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu1i");
    static STRUCT_IF_C BFu16ll_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu1i, BFu16ll_Ul_BFu1i)
//============================================================================


struct  BFu16ll_Ul_BFu1ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_Ul_BFu1ll) C1{ FL:16 FL FL:1}



static void Test_BFu16ll_Ul_BFu1ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu1ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu1ll, BFu16ll_Ul_BFu1ll)
//============================================================================


struct  BFu16ll_Ul_BFu1s  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_Ul_BFu1s) C1{ FL:16 FL Fs:1}



static void Test_BFu16ll_Ul_BFu1s()
{
  {
    init_simple_test("BFu16ll_Ul_BFu1s");
    static STRUCT_IF_C BFu16ll_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16ll_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu1s, BFu16ll_Ul_BFu1s)
//============================================================================


struct  BFu16ll_Ul_BFu31i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_Ul_BFu31i) C1{ FL:16 FL Fi:31}



static void Test_BFu16ll_Ul_BFu31i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu31i");
    static STRUCT_IF_C BFu16ll_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16ll_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16ll_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu31i, BFu16ll_Ul_BFu31i)
//============================================================================


struct  BFu16ll_Ul_BFu31ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_Ul_BFu31ll) C1{ FL:16 FL FL:31}



static void Test_BFu16ll_Ul_BFu31ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu31ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16ll_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16ll_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu31ll, BFu16ll_Ul_BFu31ll)
//============================================================================


struct  BFu16ll_Ul_BFu32i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_Ul_BFu32i) C1{ FL:16 FL Fi:32}



static void Test_BFu16ll_Ul_BFu32i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu32i");
    static STRUCT_IF_C BFu16ll_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16ll_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16ll_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu32i, BFu16ll_Ul_BFu32i)
//============================================================================


struct  BFu16ll_Ul_BFu32ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_Ul_BFu32ll) C1{ FL:16 FL FL:32}



static void Test_BFu16ll_Ul_BFu32ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu32ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16ll_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16ll_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu32ll, BFu16ll_Ul_BFu32ll)
//============================================================================


struct  BFu16ll_Ul_BFu33  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_Ul_BFu33) C1{ FL:16 FL FL:33}



static void Test_BFu16ll_Ul_BFu33()
{
  {
    init_simple_test("BFu16ll_Ul_BFu33");
    static STRUCT_IF_C BFu16ll_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu16ll_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu16ll_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu33, BFu16ll_Ul_BFu33)
//============================================================================


struct  BFu16ll_Ul_BFu7c  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_Ul_BFu7c) C1{ FL:16 FL Fc:7}



static void Test_BFu16ll_Ul_BFu7c()
{
  {
    init_simple_test("BFu16ll_Ul_BFu7c");
    static STRUCT_IF_C BFu16ll_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu7c, BFu16ll_Ul_BFu7c)
//============================================================================


struct  BFu16ll_Ul_BFu7i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_Ul_BFu7i) C1{ FL:16 FL Fi:7}



static void Test_BFu16ll_Ul_BFu7i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu7i");
    static STRUCT_IF_C BFu16ll_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu7i, BFu16ll_Ul_BFu7i)
//============================================================================


struct  BFu16ll_Ul_BFu7ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_Ul_BFu7ll) C1{ FL:16 FL FL:7}



static void Test_BFu16ll_Ul_BFu7ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu7ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu7ll, BFu16ll_Ul_BFu7ll)
//============================================================================


struct  BFu16ll_Ul_BFu7s  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_Ul_BFu7s) C1{ FL:16 FL Fs:7}



static void Test_BFu16ll_Ul_BFu7s()
{
  {
    init_simple_test("BFu16ll_Ul_BFu7s");
    static STRUCT_IF_C BFu16ll_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16ll_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16ll_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu7s, BFu16ll_Ul_BFu7s)
//============================================================================


struct  BFu16ll_Ul_BFu8c  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_Ul_BFu8c) C1{ FL:16 FL Fc:8}



static void Test_BFu16ll_Ul_BFu8c()
{
  {
    init_simple_test("BFu16ll_Ul_BFu8c");
    static STRUCT_IF_C BFu16ll_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu8c, BFu16ll_Ul_BFu8c)
//============================================================================


struct  BFu16ll_Ul_BFu8i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_Ul_BFu8i) C1{ FL:16 FL Fi:8}



static void Test_BFu16ll_Ul_BFu8i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu8i");
    static STRUCT_IF_C BFu16ll_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu8i, BFu16ll_Ul_BFu8i)
//============================================================================


struct  BFu16ll_Ul_BFu8ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_Ul_BFu8ll) C1{ FL:16 FL FL:8}



static void Test_BFu16ll_Ul_BFu8ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu8ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu8ll, BFu16ll_Ul_BFu8ll)
//============================================================================


struct  BFu16ll_Ul_BFu8s  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_Ul_BFu8s) C1{ FL:16 FL Fs:8}



static void Test_BFu16ll_Ul_BFu8s()
{
  {
    init_simple_test("BFu16ll_Ul_BFu8s");
    static STRUCT_IF_C BFu16ll_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16ll_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16ll_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu8s, BFu16ll_Ul_BFu8s)
//============================================================================


struct  BFu16ll_Ul_BFu9i  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_Ul_BFu9i) C1{ FL:16 FL Fi:9}



static void Test_BFu16ll_Ul_BFu9i()
{
  {
    init_simple_test("BFu16ll_Ul_BFu9i");
    static STRUCT_IF_C BFu16ll_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu9i, BFu16ll_Ul_BFu9i)
//============================================================================


struct  BFu16ll_Ul_BFu9ll  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_Ul_BFu9ll) C1{ FL:16 FL FL:9}



static void Test_BFu16ll_Ul_BFu9ll()
{
  {
    init_simple_test("BFu16ll_Ul_BFu9ll");
    static STRUCT_IF_C BFu16ll_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu9ll, BFu16ll_Ul_BFu9ll)
//============================================================================


struct  BFu16ll_Ul_BFu9s  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_Ul_BFu9s) C1{ FL:16 FL Fs:9}



static void Test_BFu16ll_Ul_BFu9s()
{
  {
    init_simple_test("BFu16ll_Ul_BFu9s");
    static STRUCT_IF_C BFu16ll_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16ll_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16ll_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_BFu9s, BFu16ll_Ul_BFu9s)
//============================================================================


struct  BFu16ll_Ul_C  {
  __tsu64 v1:16;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu16ll_Ul_C) C1{ FL:16 FL Fc}



static void Test_BFu16ll_Ul_C()
{
  {
    init_simple_test("BFu16ll_Ul_C");
    static STRUCT_IF_C BFu16ll_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_C, BFu16ll_Ul_C)
//============================================================================


struct  BFu16ll_Ul_D  {
  __tsu64 v1:16;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu16ll_Ul_D) C1{ FL:16 FL[2]}



static void Test_BFu16ll_Ul_D()
{
  {
    init_simple_test("BFu16ll_Ul_D");
    static STRUCT_IF_C BFu16ll_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_D, BFu16ll_Ul_D)
//============================================================================


struct  BFu16ll_Ul_F  {
  __tsu64 v1:16;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu16ll_Ul_F) C1{ FL:16 FL Fi}



static void Test_BFu16ll_Ul_F()
{
  {
    init_simple_test("BFu16ll_Ul_F");
    static STRUCT_IF_C BFu16ll_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_F, BFu16ll_Ul_F)
//============================================================================


struct  BFu16ll_Ul_I  {
  __tsu64 v1:16;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu16ll_Ul_I) C1{ FL:16 FL Fi}



static void Test_BFu16ll_Ul_I()
{
  {
    init_simple_test("BFu16ll_Ul_I");
    static STRUCT_IF_C BFu16ll_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_I, BFu16ll_Ul_I)
//============================================================================


struct  BFu16ll_Ul_Ip  {
  __tsu64 v1:16;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu16ll_Ul_Ip) C1{ FL:16 FL Fp}



static void Test_BFu16ll_Ul_Ip()
{
  {
    init_simple_test("BFu16ll_Ul_Ip");
    static STRUCT_IF_C BFu16ll_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_Ip, BFu16ll_Ul_Ip)
//============================================================================


struct  BFu16ll_Ul_L  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_Ul_L) C1{ FL:16 FL[2]}



static void Test_BFu16ll_Ul_L()
{
  {
    init_simple_test("BFu16ll_Ul_L");
    static STRUCT_IF_C BFu16ll_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_L, BFu16ll_Ul_L)
//============================================================================


struct  BFu16ll_Ul_S  {
  __tsu64 v1:16;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu16ll_Ul_S) C1{ FL:16 FL Fs}



static void Test_BFu16ll_Ul_S()
{
  {
    init_simple_test("BFu16ll_Ul_S");
    static STRUCT_IF_C BFu16ll_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_S, BFu16ll_Ul_S)
//============================================================================


struct  BFu16ll_Ul_Uc  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_Ul_Uc) C1{ FL:16 FL Fc}



static void Test_BFu16ll_Ul_Uc()
{
  {
    init_simple_test("BFu16ll_Ul_Uc");
    static STRUCT_IF_C BFu16ll_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_Uc, BFu16ll_Ul_Uc)
//============================================================================


struct  BFu16ll_Ul_Ui  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_Ul_Ui) C1{ FL:16 FL Fi}



static void Test_BFu16ll_Ul_Ui()
{
  {
    init_simple_test("BFu16ll_Ul_Ui");
    static STRUCT_IF_C BFu16ll_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_Ui, BFu16ll_Ul_Ui)
//============================================================================


struct  BFu16ll_Ul_Ul  {
  __tsu64 v1:16;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_Ul_Ul) C1{ FL:16 FL[2]}



static void Test_BFu16ll_Ul_Ul()
{
  {
    init_simple_test("BFu16ll_Ul_Ul");
    static STRUCT_IF_C BFu16ll_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16ll_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_Ul, BFu16ll_Ul_Ul)
//============================================================================


struct  BFu16ll_Ul_Us  {
  __tsu64 v1:16;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_Ul_Us) C1{ FL:16 FL Fs}



static void Test_BFu16ll_Ul_Us()
{
  {
    init_simple_test("BFu16ll_Ul_Us");
    static STRUCT_IF_C BFu16ll_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_Us, BFu16ll_Ul_Us)
//============================================================================


struct  BFu16ll_Ul_Vp  {
  __tsu64 v1:16;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu16ll_Ul_Vp) C1{ FL:16 FL Fp}



static void Test_BFu16ll_Ul_Vp()
{
  {
    init_simple_test("BFu16ll_Ul_Vp");
    static STRUCT_IF_C BFu16ll_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Ul_Vp, BFu16ll_Ul_Vp)
//============================================================================


struct  BFu16ll_Us  {
  __tsu64 v1:16;
  unsigned short v2;
};
//SIG(1 BFu16ll_Us) C1{ FL:16 Fs}



static void Test_BFu16ll_Us()
{
  {
    init_simple_test("BFu16ll_Us");
    static STRUCT_IF_C BFu16ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us");
    check_field_offset(lv, v2, 2, "BFu16ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us, BFu16ll_Us)
//============================================================================


struct  BFu16ll_Us_BFu15i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_Us_BFu15i) C1{ FL:16 Fs Fi:15}



static void Test_BFu16ll_Us_BFu15i()
{
  {
    init_simple_test("BFu16ll_Us_BFu15i");
    static STRUCT_IF_C BFu16ll_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu15i, BFu16ll_Us_BFu15i)
//============================================================================


struct  BFu16ll_Us_BFu15ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_Us_BFu15ll) C1{ FL:16 Fs FL:15}



static void Test_BFu16ll_Us_BFu15ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu15ll");
    static STRUCT_IF_C BFu16ll_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu15ll, BFu16ll_Us_BFu15ll)
//============================================================================


struct  BFu16ll_Us_BFu15s  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_Us_BFu15s) C1{ FL:16 Fs Fs:15}



static void Test_BFu16ll_Us_BFu15s()
{
  {
    init_simple_test("BFu16ll_Us_BFu15s");
    static STRUCT_IF_C BFu16ll_Us_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu15s, BFu16ll_Us_BFu15s)
//============================================================================


struct  BFu16ll_Us_BFu16i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_Us_BFu16i) C1{ FL:16 Fs Fi:16}



static void Test_BFu16ll_Us_BFu16i()
{
  {
    init_simple_test("BFu16ll_Us_BFu16i");
    static STRUCT_IF_C BFu16ll_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu16i, BFu16ll_Us_BFu16i)
//============================================================================


struct  BFu16ll_Us_BFu16ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_Us_BFu16ll) C1{ FL:16 Fs FL:16}



static void Test_BFu16ll_Us_BFu16ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu16ll");
    static STRUCT_IF_C BFu16ll_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu16ll, BFu16ll_Us_BFu16ll)
//============================================================================


struct  BFu16ll_Us_BFu16s  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_Us_BFu16s) C1{ FL:16 Fs Fs:16}



static void Test_BFu16ll_Us_BFu16s()
{
  {
    init_simple_test("BFu16ll_Us_BFu16s");
    static STRUCT_IF_C BFu16ll_Us_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu16s, BFu16ll_Us_BFu16s)
//============================================================================


struct  BFu16ll_Us_BFu17i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_Us_BFu17i) C1{ FL:16 Fs Fi:17}



static void Test_BFu16ll_Us_BFu17i()
{
  {
    init_simple_test("BFu16ll_Us_BFu17i");
    static STRUCT_IF_C BFu16ll_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu17i, BFu16ll_Us_BFu17i)
//============================================================================


struct  BFu16ll_Us_BFu17ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_Us_BFu17ll) C1{ FL:16 Fs FL:17}



static void Test_BFu16ll_Us_BFu17ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu17ll");
    static STRUCT_IF_C BFu16ll_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu17ll, BFu16ll_Us_BFu17ll)
//============================================================================


struct  BFu16ll_Us_BFu1c  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_Us_BFu1c) C1{ FL:16 Fs Fc:1}



static void Test_BFu16ll_Us_BFu1c()
{
  {
    init_simple_test("BFu16ll_Us_BFu1c");
    static STRUCT_IF_C BFu16ll_Us_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16ll_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu1c, BFu16ll_Us_BFu1c)
//============================================================================


struct  BFu16ll_Us_BFu1i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_Us_BFu1i) C1{ FL:16 Fs Fi:1}



static void Test_BFu16ll_Us_BFu1i()
{
  {
    init_simple_test("BFu16ll_Us_BFu1i");
    static STRUCT_IF_C BFu16ll_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16ll_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu1i, BFu16ll_Us_BFu1i)
//============================================================================


struct  BFu16ll_Us_BFu1ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_Us_BFu1ll) C1{ FL:16 Fs FL:1}



static void Test_BFu16ll_Us_BFu1ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu1ll");
    static STRUCT_IF_C BFu16ll_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16ll_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu1ll, BFu16ll_Us_BFu1ll)
//============================================================================


struct  BFu16ll_Us_BFu1s  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_Us_BFu1s) C1{ FL:16 Fs Fs:1}



static void Test_BFu16ll_Us_BFu1s()
{
  {
    init_simple_test("BFu16ll_Us_BFu1s");
    static STRUCT_IF_C BFu16ll_Us_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16ll_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu1s, BFu16ll_Us_BFu1s)
//============================================================================


struct  BFu16ll_Us_BFu31i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_Us_BFu31i) C1{ FL:16 Fs Fi:31}



static void Test_BFu16ll_Us_BFu31i()
{
  {
    init_simple_test("BFu16ll_Us_BFu31i");
    static STRUCT_IF_C BFu16ll_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu31i, BFu16ll_Us_BFu31i)
//============================================================================


struct  BFu16ll_Us_BFu31ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_Us_BFu31ll) C1{ FL:16 Fs FL:31}



static void Test_BFu16ll_Us_BFu31ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu31ll");
    static STRUCT_IF_C BFu16ll_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu31ll, BFu16ll_Us_BFu31ll)
//============================================================================


struct  BFu16ll_Us_BFu32i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_Us_BFu32i) C1{ FL:16 Fs Fi:32}



static void Test_BFu16ll_Us_BFu32i()
{
  {
    init_simple_test("BFu16ll_Us_BFu32i");
    static STRUCT_IF_C BFu16ll_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu32i, BFu16ll_Us_BFu32i)
//============================================================================


struct  BFu16ll_Us_BFu32ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_Us_BFu32ll) C1{ FL:16 Fs FL:32}



static void Test_BFu16ll_Us_BFu32ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu32ll");
    static STRUCT_IF_C BFu16ll_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu32ll, BFu16ll_Us_BFu32ll)
//============================================================================


struct  BFu16ll_Us_BFu33  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_Us_BFu33) C1{ FL:16 Fs FL:33}



static void Test_BFu16ll_Us_BFu33()
{
  {
    init_simple_test("BFu16ll_Us_BFu33");
    static STRUCT_IF_C BFu16ll_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu33");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu16ll_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu16ll_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu33, BFu16ll_Us_BFu33)
//============================================================================


struct  BFu16ll_Us_BFu7c  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_Us_BFu7c) C1{ FL:16 Fs Fc:7}



static void Test_BFu16ll_Us_BFu7c()
{
  {
    init_simple_test("BFu16ll_Us_BFu7c");
    static STRUCT_IF_C BFu16ll_Us_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16ll_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16ll_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu7c, BFu16ll_Us_BFu7c)
//============================================================================


struct  BFu16ll_Us_BFu7i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_Us_BFu7i) C1{ FL:16 Fs Fi:7}



static void Test_BFu16ll_Us_BFu7i()
{
  {
    init_simple_test("BFu16ll_Us_BFu7i");
    static STRUCT_IF_C BFu16ll_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16ll_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16ll_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu7i, BFu16ll_Us_BFu7i)
//============================================================================


struct  BFu16ll_Us_BFu7ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_Us_BFu7ll) C1{ FL:16 Fs FL:7}



static void Test_BFu16ll_Us_BFu7ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu7ll");
    static STRUCT_IF_C BFu16ll_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16ll_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16ll_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu7ll, BFu16ll_Us_BFu7ll)
//============================================================================


struct  BFu16ll_Us_BFu7s  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_Us_BFu7s) C1{ FL:16 Fs Fs:7}



static void Test_BFu16ll_Us_BFu7s()
{
  {
    init_simple_test("BFu16ll_Us_BFu7s");
    static STRUCT_IF_C BFu16ll_Us_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16ll_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16ll_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu7s, BFu16ll_Us_BFu7s)
//============================================================================


struct  BFu16ll_Us_BFu8c  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_Us_BFu8c) C1{ FL:16 Fs Fc:8}



static void Test_BFu16ll_Us_BFu8c()
{
  {
    init_simple_test("BFu16ll_Us_BFu8c");
    static STRUCT_IF_C BFu16ll_Us_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu8c, BFu16ll_Us_BFu8c)
//============================================================================


struct  BFu16ll_Us_BFu8i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_Us_BFu8i) C1{ FL:16 Fs Fi:8}



static void Test_BFu16ll_Us_BFu8i()
{
  {
    init_simple_test("BFu16ll_Us_BFu8i");
    static STRUCT_IF_C BFu16ll_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu8i, BFu16ll_Us_BFu8i)
//============================================================================


struct  BFu16ll_Us_BFu8ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_Us_BFu8ll) C1{ FL:16 Fs FL:8}



static void Test_BFu16ll_Us_BFu8ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu8ll");
    static STRUCT_IF_C BFu16ll_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu8ll, BFu16ll_Us_BFu8ll)
//============================================================================


struct  BFu16ll_Us_BFu8s  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_Us_BFu8s) C1{ FL:16 Fs Fs:8}



static void Test_BFu16ll_Us_BFu8s()
{
  {
    init_simple_test("BFu16ll_Us_BFu8s");
    static STRUCT_IF_C BFu16ll_Us_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16ll_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16ll_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu8s, BFu16ll_Us_BFu8s)
//============================================================================


struct  BFu16ll_Us_BFu9i  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_Us_BFu9i) C1{ FL:16 Fs Fi:9}



static void Test_BFu16ll_Us_BFu9i()
{
  {
    init_simple_test("BFu16ll_Us_BFu9i");
    static STRUCT_IF_C BFu16ll_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu9i, BFu16ll_Us_BFu9i)
//============================================================================


struct  BFu16ll_Us_BFu9ll  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_Us_BFu9ll) C1{ FL:16 Fs FL:9}



static void Test_BFu16ll_Us_BFu9ll()
{
  {
    init_simple_test("BFu16ll_Us_BFu9ll");
    static STRUCT_IF_C BFu16ll_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu9ll, BFu16ll_Us_BFu9ll)
//============================================================================


struct  BFu16ll_Us_BFu9s  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_Us_BFu9s) C1{ FL:16 Fs Fs:9}



static void Test_BFu16ll_Us_BFu9s()
{
  {
    init_simple_test("BFu16ll_Us_BFu9s");
    static STRUCT_IF_C BFu16ll_Us_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_BFu9s, BFu16ll_Us_BFu9s)
//============================================================================


struct  BFu16ll_Us_C  {
  __tsu64 v1:16;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu16ll_Us_C) C1{ FL:16 Fs Fc}



static void Test_BFu16ll_Us_C()
{
  {
    init_simple_test("BFu16ll_Us_C");
    static STRUCT_IF_C BFu16ll_Us_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_C");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_C.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_C, BFu16ll_Us_C)
//============================================================================


struct  BFu16ll_Us_D  {
  __tsu64 v1:16;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu16ll_Us_D) C1{ FL:16 Fs FL}



static void Test_BFu16ll_Us_D()
{
  {
    init_simple_test("BFu16ll_Us_D");
    static STRUCT_IF_C BFu16ll_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_D");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_D, BFu16ll_Us_D)
//============================================================================


struct  BFu16ll_Us_F  {
  __tsu64 v1:16;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu16ll_Us_F) C1{ FL:16 Fs Fi}



static void Test_BFu16ll_Us_F()
{
  {
    init_simple_test("BFu16ll_Us_F");
    static STRUCT_IF_C BFu16ll_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_F");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_F.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_F, BFu16ll_Us_F)
//============================================================================


struct  BFu16ll_Us_I  {
  __tsu64 v1:16;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu16ll_Us_I) C1{ FL:16 Fs Fi}



static void Test_BFu16ll_Us_I()
{
  {
    init_simple_test("BFu16ll_Us_I");
    static STRUCT_IF_C BFu16ll_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_I");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_I, BFu16ll_Us_I)
//============================================================================


struct  BFu16ll_Us_Ip  {
  __tsu64 v1:16;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu16ll_Us_Ip) C1{ FL:16 Fs Fp}



static void Test_BFu16ll_Us_Ip()
{
  {
    init_simple_test("BFu16ll_Us_Ip");
    static STRUCT_IF_C BFu16ll_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_Ip, BFu16ll_Us_Ip)
//============================================================================


struct  BFu16ll_Us_L  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_Us_L) C1{ FL:16 Fs FL}



static void Test_BFu16ll_Us_L()
{
  {
    init_simple_test("BFu16ll_Us_L");
    static STRUCT_IF_C BFu16ll_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_L");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_L, BFu16ll_Us_L)
//============================================================================


struct  BFu16ll_Us_S  {
  __tsu64 v1:16;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu16ll_Us_S) C1{ FL:16 Fs[2]}



static void Test_BFu16ll_Us_S()
{
  {
    init_simple_test("BFu16ll_Us_S");
    static STRUCT_IF_C BFu16ll_Us_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_S");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_S, BFu16ll_Us_S)
//============================================================================


struct  BFu16ll_Us_Uc  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_Us_Uc) C1{ FL:16 Fs Fc}



static void Test_BFu16ll_Us_Uc()
{
  {
    init_simple_test("BFu16ll_Us_Uc");
    static STRUCT_IF_C BFu16ll_Us_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_Uc, BFu16ll_Us_Uc)
//============================================================================


struct  BFu16ll_Us_Ui  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_Us_Ui) C1{ FL:16 Fs Fi}



static void Test_BFu16ll_Us_Ui()
{
  {
    init_simple_test("BFu16ll_Us_Ui");
    static STRUCT_IF_C BFu16ll_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_Ui, BFu16ll_Us_Ui)
//============================================================================


struct  BFu16ll_Us_Ul  {
  __tsu64 v1:16;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_Us_Ul) C1{ FL:16 Fs FL}



static void Test_BFu16ll_Us_Ul()
{
  {
    init_simple_test("BFu16ll_Us_Ul");
    static STRUCT_IF_C BFu16ll_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_Ul, BFu16ll_Us_Ul)
//============================================================================


struct  BFu16ll_Us_Us  {
  __tsu64 v1:16;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_Us_Us) C1{ FL:16 Fs[2]}



static void Test_BFu16ll_Us_Us()
{
  {
    init_simple_test("BFu16ll_Us_Us");
    static STRUCT_IF_C BFu16ll_Us_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_Us");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_Us, BFu16ll_Us_Us)
//============================================================================


struct  BFu16ll_Us_Vp  {
  __tsu64 v1:16;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu16ll_Us_Vp) C1{ FL:16 Fs Fp}



static void Test_BFu16ll_Us_Vp()
{
  {
    init_simple_test("BFu16ll_Us_Vp");
    static STRUCT_IF_C BFu16ll_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Us_Vp, BFu16ll_Us_Vp)
//============================================================================


struct  BFu16ll_Vp  {
  __tsu64 v1:16;
  void *v2;
};
//SIG(1 BFu16ll_Vp) C1{ FL:16 Fp}



static void Test_BFu16ll_Vp()
{
  {
    init_simple_test("BFu16ll_Vp");
    static STRUCT_IF_C BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp, BFu16ll_Vp)
//============================================================================


struct  BFu16ll_Vp_BFu15i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_Vp_BFu15i) C1{ FL:16 Fp Fi:15}



static void Test_BFu16ll_Vp_BFu15i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu15i");
    static STRUCT_IF_C BFu16ll_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16ll_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16ll_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu15i, BFu16ll_Vp_BFu15i)
//============================================================================


struct  BFu16ll_Vp_BFu15ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_Vp_BFu15ll) C1{ FL:16 Fp FL:15}



static void Test_BFu16ll_Vp_BFu15ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu15ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16ll_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16ll_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu15ll, BFu16ll_Vp_BFu15ll)
//============================================================================


struct  BFu16ll_Vp_BFu15s  {
  __tsu64 v1:16;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_Vp_BFu15s) C1{ FL:16 Fp Fs:15}



static void Test_BFu16ll_Vp_BFu15s()
{
  {
    init_simple_test("BFu16ll_Vp_BFu15s");
    static STRUCT_IF_C BFu16ll_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16ll_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16ll_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu15s, BFu16ll_Vp_BFu15s)
//============================================================================


struct  BFu16ll_Vp_BFu16i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_Vp_BFu16i) C1{ FL:16 Fp Fi:16}



static void Test_BFu16ll_Vp_BFu16i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu16i");
    static STRUCT_IF_C BFu16ll_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16ll_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu16i, BFu16ll_Vp_BFu16i)
//============================================================================


struct  BFu16ll_Vp_BFu16ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_Vp_BFu16ll) C1{ FL:16 Fp FL:16}



static void Test_BFu16ll_Vp_BFu16ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu16ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16ll_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu16ll, BFu16ll_Vp_BFu16ll)
//============================================================================


struct  BFu16ll_Vp_BFu16s  {
  __tsu64 v1:16;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_Vp_BFu16s) C1{ FL:16 Fp Fs:16}



static void Test_BFu16ll_Vp_BFu16s()
{
  {
    init_simple_test("BFu16ll_Vp_BFu16s");
    static STRUCT_IF_C BFu16ll_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16ll_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu16s, BFu16ll_Vp_BFu16s)
//============================================================================


struct  BFu16ll_Vp_BFu17i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_Vp_BFu17i) C1{ FL:16 Fp Fi:17}



static void Test_BFu16ll_Vp_BFu17i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu17i");
    static STRUCT_IF_C BFu16ll_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu16ll_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu16ll_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu17i, BFu16ll_Vp_BFu17i)
//============================================================================


struct  BFu16ll_Vp_BFu17ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_Vp_BFu17ll) C1{ FL:16 Fp FL:17}



static void Test_BFu16ll_Vp_BFu17ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu17ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu16ll_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu16ll_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu17ll, BFu16ll_Vp_BFu17ll)
//============================================================================


struct  BFu16ll_Vp_BFu1c  {
  __tsu64 v1:16;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_Vp_BFu1c) C1{ FL:16 Fp Fc:1}



static void Test_BFu16ll_Vp_BFu1c()
{
  {
    init_simple_test("BFu16ll_Vp_BFu1c");
    static STRUCT_IF_C BFu16ll_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16ll_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu1c, BFu16ll_Vp_BFu1c)
//============================================================================


struct  BFu16ll_Vp_BFu1i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_Vp_BFu1i) C1{ FL:16 Fp Fi:1}



static void Test_BFu16ll_Vp_BFu1i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu1i");
    static STRUCT_IF_C BFu16ll_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16ll_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu1i, BFu16ll_Vp_BFu1i)
//============================================================================


struct  BFu16ll_Vp_BFu1ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_Vp_BFu1ll) C1{ FL:16 Fp FL:1}



static void Test_BFu16ll_Vp_BFu1ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu1ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16ll_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu1ll, BFu16ll_Vp_BFu1ll)
//============================================================================


struct  BFu16ll_Vp_BFu1s  {
  __tsu64 v1:16;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_Vp_BFu1s) C1{ FL:16 Fp Fs:1}



static void Test_BFu16ll_Vp_BFu1s()
{
  {
    init_simple_test("BFu16ll_Vp_BFu1s");
    static STRUCT_IF_C BFu16ll_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16ll_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu1s, BFu16ll_Vp_BFu1s)
//============================================================================


struct  BFu16ll_Vp_BFu31i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_Vp_BFu31i) C1{ FL:16 Fp Fi:31}



static void Test_BFu16ll_Vp_BFu31i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu31i");
    static STRUCT_IF_C BFu16ll_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu16ll_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu16ll_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu31i, BFu16ll_Vp_BFu31i)
//============================================================================


struct  BFu16ll_Vp_BFu31ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_Vp_BFu31ll) C1{ FL:16 Fp FL:31}



static void Test_BFu16ll_Vp_BFu31ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu31ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu16ll_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu16ll_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu31ll, BFu16ll_Vp_BFu31ll)
//============================================================================


struct  BFu16ll_Vp_BFu32i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_Vp_BFu32i) C1{ FL:16 Fp Fi:32}



static void Test_BFu16ll_Vp_BFu32i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu32i");
    static STRUCT_IF_C BFu16ll_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu16ll_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu16ll_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu32i, BFu16ll_Vp_BFu32i)
//============================================================================


struct  BFu16ll_Vp_BFu32ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_Vp_BFu32ll) C1{ FL:16 Fp FL:32}



static void Test_BFu16ll_Vp_BFu32ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu32ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu16ll_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu16ll_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu32ll, BFu16ll_Vp_BFu32ll)
//============================================================================


struct  BFu16ll_Vp_BFu33  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_Vp_BFu33) C1{ FL:16 Fp FL:33}



static void Test_BFu16ll_Vp_BFu33()
{
  {
    init_simple_test("BFu16ll_Vp_BFu33");
    static STRUCT_IF_C BFu16ll_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu16ll_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu16ll_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu33, BFu16ll_Vp_BFu33)
//============================================================================


struct  BFu16ll_Vp_BFu7c  {
  __tsu64 v1:16;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_Vp_BFu7c) C1{ FL:16 Fp Fc:7}



static void Test_BFu16ll_Vp_BFu7c()
{
  {
    init_simple_test("BFu16ll_Vp_BFu7c");
    static STRUCT_IF_C BFu16ll_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16ll_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16ll_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu7c, BFu16ll_Vp_BFu7c)
//============================================================================


struct  BFu16ll_Vp_BFu7i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_Vp_BFu7i) C1{ FL:16 Fp Fi:7}



static void Test_BFu16ll_Vp_BFu7i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu7i");
    static STRUCT_IF_C BFu16ll_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16ll_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16ll_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu7i, BFu16ll_Vp_BFu7i)
//============================================================================


struct  BFu16ll_Vp_BFu7ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_Vp_BFu7ll) C1{ FL:16 Fp FL:7}



static void Test_BFu16ll_Vp_BFu7ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu7ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16ll_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16ll_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu7ll, BFu16ll_Vp_BFu7ll)
//============================================================================


struct  BFu16ll_Vp_BFu7s  {
  __tsu64 v1:16;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_Vp_BFu7s) C1{ FL:16 Fp Fs:7}



static void Test_BFu16ll_Vp_BFu7s()
{
  {
    init_simple_test("BFu16ll_Vp_BFu7s");
    static STRUCT_IF_C BFu16ll_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16ll_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16ll_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu7s, BFu16ll_Vp_BFu7s)
//============================================================================


struct  BFu16ll_Vp_BFu8c  {
  __tsu64 v1:16;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_Vp_BFu8c) C1{ FL:16 Fp Fc:8}



static void Test_BFu16ll_Vp_BFu8c()
{
  {
    init_simple_test("BFu16ll_Vp_BFu8c");
    static STRUCT_IF_C BFu16ll_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16ll_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16ll_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu8c, BFu16ll_Vp_BFu8c)
//============================================================================


struct  BFu16ll_Vp_BFu8i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_Vp_BFu8i) C1{ FL:16 Fp Fi:8}



static void Test_BFu16ll_Vp_BFu8i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu8i");
    static STRUCT_IF_C BFu16ll_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16ll_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16ll_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu8i, BFu16ll_Vp_BFu8i)
//============================================================================


struct  BFu16ll_Vp_BFu8ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_Vp_BFu8ll) C1{ FL:16 Fp FL:8}



static void Test_BFu16ll_Vp_BFu8ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu8ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16ll_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16ll_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu8ll, BFu16ll_Vp_BFu8ll)
//============================================================================


struct  BFu16ll_Vp_BFu8s  {
  __tsu64 v1:16;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_Vp_BFu8s) C1{ FL:16 Fp Fs:8}



static void Test_BFu16ll_Vp_BFu8s()
{
  {
    init_simple_test("BFu16ll_Vp_BFu8s");
    static STRUCT_IF_C BFu16ll_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16ll_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16ll_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu8s, BFu16ll_Vp_BFu8s)
//============================================================================


struct  BFu16ll_Vp_BFu9i  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_Vp_BFu9i) C1{ FL:16 Fp Fi:9}



static void Test_BFu16ll_Vp_BFu9i()
{
  {
    init_simple_test("BFu16ll_Vp_BFu9i");
    static STRUCT_IF_C BFu16ll_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16ll_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16ll_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu9i, BFu16ll_Vp_BFu9i)
//============================================================================


struct  BFu16ll_Vp_BFu9ll  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_Vp_BFu9ll) C1{ FL:16 Fp FL:9}



static void Test_BFu16ll_Vp_BFu9ll()
{
  {
    init_simple_test("BFu16ll_Vp_BFu9ll");
    static STRUCT_IF_C BFu16ll_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16ll_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16ll_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu9ll, BFu16ll_Vp_BFu9ll)
//============================================================================


struct  BFu16ll_Vp_BFu9s  {
  __tsu64 v1:16;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_Vp_BFu9s) C1{ FL:16 Fp Fs:9}



static void Test_BFu16ll_Vp_BFu9s()
{
  {
    init_simple_test("BFu16ll_Vp_BFu9s");
    static STRUCT_IF_C BFu16ll_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16ll_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16ll_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_BFu9s, BFu16ll_Vp_BFu9s)
//============================================================================


struct  BFu16ll_Vp_C  {
  __tsu64 v1:16;
  void *v2;
  char v3;
};
//SIG(1 BFu16ll_Vp_C) C1{ FL:16 Fp Fc}



static void Test_BFu16ll_Vp_C()
{
  {
    init_simple_test("BFu16ll_Vp_C");
    static STRUCT_IF_C BFu16ll_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_C, BFu16ll_Vp_C)
//============================================================================


struct  BFu16ll_Vp_D  {
  __tsu64 v1:16;
  void *v2;
  double v3;
};
//SIG(1 BFu16ll_Vp_D) C1{ FL:16 Fp FL}



static void Test_BFu16ll_Vp_D()
{
  {
    init_simple_test("BFu16ll_Vp_D");
    static STRUCT_IF_C BFu16ll_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_D, BFu16ll_Vp_D)
//============================================================================


struct  BFu16ll_Vp_F  {
  __tsu64 v1:16;
  void *v2;
  float v3;
};
//SIG(1 BFu16ll_Vp_F) C1{ FL:16 Fp Fi}



static void Test_BFu16ll_Vp_F()
{
  {
    init_simple_test("BFu16ll_Vp_F");
    static STRUCT_IF_C BFu16ll_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_F, BFu16ll_Vp_F)
//============================================================================


struct  BFu16ll_Vp_I  {
  __tsu64 v1:16;
  void *v2;
  int v3;
};
//SIG(1 BFu16ll_Vp_I) C1{ FL:16 Fp Fi}



static void Test_BFu16ll_Vp_I()
{
  {
    init_simple_test("BFu16ll_Vp_I");
    static STRUCT_IF_C BFu16ll_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_I, BFu16ll_Vp_I)
//============================================================================


struct  BFu16ll_Vp_Ip  {
  __tsu64 v1:16;
  void *v2;
  int *v3;
};
//SIG(1 BFu16ll_Vp_Ip) C1{ FL:16 Fp[2]}



static void Test_BFu16ll_Vp_Ip()
{
  {
    init_simple_test("BFu16ll_Vp_Ip");
    static STRUCT_IF_C BFu16ll_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_Ip, BFu16ll_Vp_Ip)
//============================================================================


struct  BFu16ll_Vp_L  {
  __tsu64 v1:16;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_Vp_L) C1{ FL:16 Fp FL}



static void Test_BFu16ll_Vp_L()
{
  {
    init_simple_test("BFu16ll_Vp_L");
    static STRUCT_IF_C BFu16ll_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_L, BFu16ll_Vp_L)
//============================================================================


struct  BFu16ll_Vp_S  {
  __tsu64 v1:16;
  void *v2;
  short v3;
};
//SIG(1 BFu16ll_Vp_S) C1{ FL:16 Fp Fs}



static void Test_BFu16ll_Vp_S()
{
  {
    init_simple_test("BFu16ll_Vp_S");
    static STRUCT_IF_C BFu16ll_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_S, BFu16ll_Vp_S)
//============================================================================


struct  BFu16ll_Vp_Uc  {
  __tsu64 v1:16;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_Vp_Uc) C1{ FL:16 Fp Fc}



static void Test_BFu16ll_Vp_Uc()
{
  {
    init_simple_test("BFu16ll_Vp_Uc");
    static STRUCT_IF_C BFu16ll_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_Uc, BFu16ll_Vp_Uc)
//============================================================================


struct  BFu16ll_Vp_Ui  {
  __tsu64 v1:16;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_Vp_Ui) C1{ FL:16 Fp Fi}



static void Test_BFu16ll_Vp_Ui()
{
  {
    init_simple_test("BFu16ll_Vp_Ui");
    static STRUCT_IF_C BFu16ll_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_Ui, BFu16ll_Vp_Ui)
//============================================================================


struct  BFu16ll_Vp_Ul  {
  __tsu64 v1:16;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_Vp_Ul) C1{ FL:16 Fp FL}



static void Test_BFu16ll_Vp_Ul()
{
  {
    init_simple_test("BFu16ll_Vp_Ul");
    static STRUCT_IF_C BFu16ll_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_Ul, BFu16ll_Vp_Ul)
//============================================================================


struct  BFu16ll_Vp_Us  {
  __tsu64 v1:16;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_Vp_Us) C1{ FL:16 Fp Fs}



static void Test_BFu16ll_Vp_Us()
{
  {
    init_simple_test("BFu16ll_Vp_Us");
    static STRUCT_IF_C BFu16ll_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_Us, BFu16ll_Vp_Us)
//============================================================================


struct  BFu16ll_Vp_Vp  {
  __tsu64 v1:16;
  void *v2;
  void *v3;
};
//SIG(1 BFu16ll_Vp_Vp) C1{ FL:16 Fp[2]}



static void Test_BFu16ll_Vp_Vp()
{
  {
    init_simple_test("BFu16ll_Vp_Vp");
    static STRUCT_IF_C BFu16ll_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16ll_Vp_Vp, BFu16ll_Vp_Vp)
//============================================================================


struct  BFu16s  {
  unsigned short v1:16;
};
//SIG(1 BFu16s) C1{ Fs:16}



static void Test_BFu16s()
{
  {
    init_simple_test("BFu16s");
    static STRUCT_IF_C BFu16s lv;
    check2(sizeof(lv), 2, "sizeof(BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s, BFu16s)
//============================================================================


struct  BFu16s_BFs16i  {
  unsigned short v1:16;
  signed int v2:16;
};
//SIG(1 BFu16s_BFs16i) C1{ Fs:16 Fi:16}



static void Test_BFu16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i, BFu16s_BFs16i)
//============================================================================


struct  BFu16s_BFs16i_BFs16i  {
  unsigned short v1:16;
  signed int v2:16;
  signed int v3:16;
};
//SIG(1 BFu16s_BFs16i_BFs16i) C1{ Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16i, BFu16s_BFs16i_BFs16i)
//============================================================================


struct  BFu16s_BFs16i_BFs16i_BFs16i  {
  unsigned short v1:16;
  signed int v2:16;
  signed int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16i_BFs16i) C1{ Fs:16 Fi:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16i_BFs16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16i_BFs16i, BFu16s_BFs16i_BFs16i_BFs16i)
//============================================================================


struct  BFu16s_BFs16i_BFs16i_BFs16ll  {
  unsigned short v1:16;
  signed int v2:16;
  signed int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16i_BFs16ll) C1{ Fs:16 Fi:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16i_BFs16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16i_BFs16ll, BFu16s_BFs16i_BFs16i_BFs16ll)
//============================================================================


struct  BFu16s_BFs16i_BFs16i_BFs16s  {
  unsigned short v1:16;
  signed int v2:16;
  signed int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16i_BFs16s) C1{ Fs:16 Fi:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16i_BFs16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16i_BFs16s, BFu16s_BFs16i_BFs16i_BFs16s)
//============================================================================


struct  BFu16s_BFs16i_BFs16i_BFu16i  {
  unsigned short v1:16;
  signed int v2:16;
  signed int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16i_BFu16i) C1{ Fs:16 Fi:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16i_BFs16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16i_BFu16i, BFu16s_BFs16i_BFs16i_BFu16i)
//============================================================================


struct  BFu16s_BFs16i_BFs16i_BFu16ll  {
  unsigned short v1:16;
  signed int v2:16;
  signed int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16i_BFu16ll) C1{ Fs:16 Fi:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16i_BFs16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16i_BFu16ll, BFu16s_BFs16i_BFs16i_BFu16ll)
//============================================================================


struct  BFu16s_BFs16i_BFs16i_BFu16s  {
  unsigned short v1:16;
  signed int v2:16;
  signed int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16i_BFu16s) C1{ Fs:16 Fi:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16i_BFs16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16i_BFu16s, BFu16s_BFs16i_BFs16i_BFu16s)
//============================================================================


struct  BFu16s_BFs16i_BFs16ll  {
  unsigned short v1:16;
  signed int v2:16;
  signed __tsi64 v3:16;
};
//SIG(1 BFu16s_BFs16i_BFs16ll) C1{ Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16ll, BFu16s_BFs16i_BFs16ll)
//============================================================================


struct  BFu16s_BFs16i_BFs16ll_BFs16i  {
  unsigned short v1:16;
  signed int v2:16;
  signed __tsi64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16ll_BFs16i) C1{ Fs:16 Fi:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16i_BFs16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16ll_BFs16i, BFu16s_BFs16i_BFs16ll_BFs16i)
//============================================================================


struct  BFu16s_BFs16i_BFs16ll_BFs16ll  {
  unsigned short v1:16;
  signed int v2:16;
  signed __tsi64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16ll_BFs16ll) C1{ Fs:16 Fi:16 FL:16 FL:16}



static void Test_BFu16s_BFs16i_BFs16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16ll_BFs16ll, BFu16s_BFs16i_BFs16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFs16i_BFs16ll_BFs16s  {
  unsigned short v1:16;
  signed int v2:16;
  signed __tsi64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16ll_BFs16s) C1{ Fs:16 Fi:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16i_BFs16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16ll_BFs16s, BFu16s_BFs16i_BFs16ll_BFs16s)
//============================================================================


struct  BFu16s_BFs16i_BFs16ll_BFu16i  {
  unsigned short v1:16;
  signed int v2:16;
  signed __tsi64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16ll_BFu16i) C1{ Fs:16 Fi:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16i_BFs16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16ll_BFu16i, BFu16s_BFs16i_BFs16ll_BFu16i)
//============================================================================


struct  BFu16s_BFs16i_BFs16ll_BFu16ll  {
  unsigned short v1:16;
  signed int v2:16;
  signed __tsi64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16ll_BFu16ll) C1{ Fs:16 Fi:16 FL:16 FL:16}



static void Test_BFu16s_BFs16i_BFs16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16ll_BFu16ll, BFu16s_BFs16i_BFs16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFs16i_BFs16ll_BFu16s  {
  unsigned short v1:16;
  signed int v2:16;
  signed __tsi64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16ll_BFu16s) C1{ Fs:16 Fi:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16i_BFs16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16ll_BFu16s, BFu16s_BFs16i_BFs16ll_BFu16s)
//============================================================================


struct  BFu16s_BFs16i_BFs16s  {
  unsigned short v1:16;
  signed int v2:16;
  signed short v3:16;
};
//SIG(1 BFu16s_BFs16i_BFs16s) C1{ Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16s, BFu16s_BFs16i_BFs16s)
//============================================================================


struct  BFu16s_BFs16i_BFs16s_BFs16i  {
  unsigned short v1:16;
  signed int v2:16;
  signed short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16s_BFs16i) C1{ Fs:16 Fi:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16i_BFs16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16s_BFs16i, BFu16s_BFs16i_BFs16s_BFs16i)
//============================================================================


struct  BFu16s_BFs16i_BFs16s_BFs16ll  {
  unsigned short v1:16;
  signed int v2:16;
  signed short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16s_BFs16ll) C1{ Fs:16 Fi:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16i_BFs16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16s_BFs16ll, BFu16s_BFs16i_BFs16s_BFs16ll)
//============================================================================


struct  BFu16s_BFs16i_BFs16s_BFs16s  {
  unsigned short v1:16;
  signed int v2:16;
  signed short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16s_BFs16s) C1{ Fs:16 Fi:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16i_BFs16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16s_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16s_BFs16s, BFu16s_BFs16i_BFs16s_BFs16s)
//============================================================================


struct  BFu16s_BFs16i_BFs16s_BFu16i  {
  unsigned short v1:16;
  signed int v2:16;
  signed short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16s_BFu16i) C1{ Fs:16 Fi:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16i_BFs16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16s_BFu16i, BFu16s_BFs16i_BFs16s_BFu16i)
//============================================================================


struct  BFu16s_BFs16i_BFs16s_BFu16ll  {
  unsigned short v1:16;
  signed int v2:16;
  signed short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16s_BFu16ll) C1{ Fs:16 Fi:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16i_BFs16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFs16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16s_BFu16ll, BFu16s_BFs16i_BFs16s_BFu16ll)
//============================================================================


struct  BFu16s_BFs16i_BFs16s_BFu16s  {
  unsigned short v1:16;
  signed int v2:16;
  signed short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFs16s_BFu16s) C1{ Fs:16 Fi:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16i_BFs16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFs16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFs16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFs16s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFs16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFs16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFs16s_BFu16s, BFu16s_BFs16i_BFs16s_BFu16s)
//============================================================================


struct  BFu16s_BFs16i_BFu16i  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFs16i_BFu16i) C1{ Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16i, BFu16s_BFs16i_BFu16i)
//============================================================================


struct  BFu16s_BFs16i_BFu16i_BFs16i  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16i_BFs16i) C1{ Fs:16 Fi:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16i_BFu16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16i_BFs16i, BFu16s_BFs16i_BFu16i_BFs16i)
//============================================================================


struct  BFu16s_BFs16i_BFu16i_BFs16ll  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16i_BFs16ll) C1{ Fs:16 Fi:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16i_BFu16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16i_BFs16ll, BFu16s_BFs16i_BFu16i_BFs16ll)
//============================================================================


struct  BFu16s_BFs16i_BFu16i_BFs16s  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16i_BFs16s) C1{ Fs:16 Fi:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16i_BFu16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16i_BFs16s, BFu16s_BFs16i_BFu16i_BFs16s)
//============================================================================


struct  BFu16s_BFs16i_BFu16i_BFu16i  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16i_BFu16i) C1{ Fs:16 Fi:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16i_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16i_BFu16i, BFu16s_BFs16i_BFu16i_BFu16i)
//============================================================================


struct  BFu16s_BFs16i_BFu16i_BFu16ll  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16i_BFu16ll) C1{ Fs:16 Fi:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16i_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16i_BFu16ll, BFu16s_BFs16i_BFu16i_BFu16ll)
//============================================================================


struct  BFu16s_BFs16i_BFu16i_BFu16s  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16i_BFu16s) C1{ Fs:16 Fi:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16i_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16i_BFu16s, BFu16s_BFs16i_BFu16i_BFu16s)
//============================================================================


struct  BFu16s_BFs16i_BFu16ll  {
  unsigned short v1:16;
  signed int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFs16i_BFu16ll) C1{ Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16ll, BFu16s_BFs16i_BFu16ll)
//============================================================================


struct  BFu16s_BFs16i_BFu16ll_BFs16i  {
  unsigned short v1:16;
  signed int v2:16;
  __tsu64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16ll_BFs16i) C1{ Fs:16 Fi:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16i_BFu16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16ll_BFs16i, BFu16s_BFs16i_BFu16ll_BFs16i)
//============================================================================


struct  BFu16s_BFs16i_BFu16ll_BFs16ll  {
  unsigned short v1:16;
  signed int v2:16;
  __tsu64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16ll_BFs16ll) C1{ Fs:16 Fi:16 FL:16 FL:16}



static void Test_BFu16s_BFs16i_BFu16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16ll_BFs16ll, BFu16s_BFs16i_BFu16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFs16i_BFu16ll_BFs16s  {
  unsigned short v1:16;
  signed int v2:16;
  __tsu64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16ll_BFs16s) C1{ Fs:16 Fi:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16i_BFu16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16ll_BFs16s, BFu16s_BFs16i_BFu16ll_BFs16s)
//============================================================================


struct  BFu16s_BFs16i_BFu16ll_BFu16i  {
  unsigned short v1:16;
  signed int v2:16;
  __tsu64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16ll_BFu16i) C1{ Fs:16 Fi:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16i_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16ll_BFu16i, BFu16s_BFs16i_BFu16ll_BFu16i)
//============================================================================


struct  BFu16s_BFs16i_BFu16ll_BFu16ll  {
  unsigned short v1:16;
  signed int v2:16;
  __tsu64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16ll_BFu16ll) C1{ Fs:16 Fi:16 FL:16 FL:16}



static void Test_BFu16s_BFs16i_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16ll_BFu16ll, BFu16s_BFs16i_BFu16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFs16i_BFu16ll_BFu16s  {
  unsigned short v1:16;
  signed int v2:16;
  __tsu64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16ll_BFu16s) C1{ Fs:16 Fi:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16i_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16ll_BFu16s, BFu16s_BFs16i_BFu16ll_BFu16s)
//============================================================================


struct  BFu16s_BFs16i_BFu16s  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFs16i_BFu16s) C1{ Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16s, BFu16s_BFs16i_BFu16s)
//============================================================================


struct  BFu16s_BFs16i_BFu16s_BFs16i  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16s_BFs16i) C1{ Fs:16 Fi:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16i_BFu16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16s_BFs16i, BFu16s_BFs16i_BFu16s_BFs16i)
//============================================================================


struct  BFu16s_BFs16i_BFu16s_BFs16ll  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16s_BFs16ll) C1{ Fs:16 Fi:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16i_BFu16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16s_BFs16ll, BFu16s_BFs16i_BFu16s_BFs16ll)
//============================================================================


struct  BFu16s_BFs16i_BFu16s_BFs16s  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16s_BFs16s) C1{ Fs:16 Fi:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16i_BFu16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16s_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16s_BFs16s, BFu16s_BFs16i_BFu16s_BFs16s)
//============================================================================


struct  BFu16s_BFs16i_BFu16s_BFu16i  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16s_BFu16i) C1{ Fs:16 Fi:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16i_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16s_BFu16i, BFu16s_BFs16i_BFu16s_BFu16i)
//============================================================================


struct  BFu16s_BFs16i_BFu16s_BFu16ll  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16s_BFu16ll) C1{ Fs:16 Fi:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16i_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16i_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16s_BFu16ll, BFu16s_BFs16i_BFu16s_BFu16ll)
//============================================================================


struct  BFu16s_BFs16i_BFu16s_BFu16s  {
  unsigned short v1:16;
  signed int v2:16;
  unsigned short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16i_BFu16s_BFu16s) C1{ Fs:16 Fi:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16i_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16i_BFu16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16i_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16i_BFu16s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16i_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16i_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16i_BFu16s_BFu16s, BFu16s_BFs16i_BFu16s_BFu16s)
//============================================================================


struct  BFu16s_BFs16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
};
//SIG(1 BFu16s_BFs16ll) C1{ Fs:16 FL:16}



static void Test_BFu16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll, BFu16s_BFs16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFs16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed int v3:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16i) C1{ Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16i, BFu16s_BFs16ll_BFs16i)
//============================================================================


struct  BFu16s_BFs16ll_BFs16i_BFs16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16i_BFs16i) C1{ Fs:16 FL:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFs16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16i_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16i_BFs16i, BFu16s_BFs16ll_BFs16i_BFs16i)
//============================================================================


struct  BFu16s_BFs16ll_BFs16i_BFs16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16i_BFs16ll) C1{ Fs:16 FL:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16ll_BFs16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16i_BFs16ll, BFu16s_BFs16ll_BFs16i_BFs16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFs16i_BFs16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16i_BFs16s) C1{ Fs:16 FL:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFs16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16i_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16i_BFs16s, BFu16s_BFs16ll_BFs16i_BFs16s)
//============================================================================


struct  BFu16s_BFs16ll_BFs16i_BFu16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16i_BFu16i) C1{ Fs:16 FL:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFs16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16i_BFu16i, BFu16s_BFs16ll_BFs16i_BFu16i)
//============================================================================


struct  BFu16s_BFs16ll_BFs16i_BFu16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16i_BFu16ll) C1{ Fs:16 FL:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16ll_BFs16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16i_BFu16ll, BFu16s_BFs16ll_BFs16i_BFu16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFs16i_BFu16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16i_BFu16s) C1{ Fs:16 FL:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFs16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16i_BFu16s, BFu16s_BFs16ll_BFs16i_BFu16s)
//============================================================================


struct  BFu16s_BFs16ll_BFs16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed __tsi64 v3:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16ll) C1{ Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFs16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16ll, BFu16s_BFs16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFs16ll_BFs16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed __tsi64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16ll_BFs16i) C1{ Fs:16 FL:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFs16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16ll_BFs16i, BFu16s_BFs16ll_BFs16ll_BFs16i)
//============================================================================


struct  BFu16s_BFs16ll_BFs16ll_BFs16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed __tsi64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16ll_BFs16ll) C1{ Fs:16 FL:16 FL:16 FL:16}



static void Test_BFu16s_BFs16ll_BFs16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16ll_BFs16ll, BFu16s_BFs16ll_BFs16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFs16ll_BFs16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed __tsi64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16ll_BFs16s) C1{ Fs:16 FL:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFs16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16ll_BFs16s, BFu16s_BFs16ll_BFs16ll_BFs16s)
//============================================================================


struct  BFu16s_BFs16ll_BFs16ll_BFu16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed __tsi64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16ll_BFu16i) C1{ Fs:16 FL:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFs16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16ll_BFu16i, BFu16s_BFs16ll_BFs16ll_BFu16i)
//============================================================================


struct  BFu16s_BFs16ll_BFs16ll_BFu16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed __tsi64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16ll_BFu16ll) C1{ Fs:16 FL:16 FL:16 FL:16}



static void Test_BFu16s_BFs16ll_BFs16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16ll_BFu16ll, BFu16s_BFs16ll_BFs16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFs16ll_BFu16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed __tsi64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16ll_BFu16s) C1{ Fs:16 FL:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFs16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16ll_BFu16s, BFu16s_BFs16ll_BFs16ll_BFu16s)
//============================================================================


struct  BFu16s_BFs16ll_BFs16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed short v3:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16s) C1{ Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16s, BFu16s_BFs16ll_BFs16s)
//============================================================================


struct  BFu16s_BFs16ll_BFs16s_BFs16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16s_BFs16i) C1{ Fs:16 FL:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFs16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16s_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16s_BFs16i, BFu16s_BFs16ll_BFs16s_BFs16i)
//============================================================================


struct  BFu16s_BFs16ll_BFs16s_BFs16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16s_BFs16ll) C1{ Fs:16 FL:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16ll_BFs16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16s_BFs16ll, BFu16s_BFs16ll_BFs16s_BFs16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFs16s_BFs16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16s_BFs16s) C1{ Fs:16 FL:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFs16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16s_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16s_BFs16s, BFu16s_BFs16ll_BFs16s_BFs16s)
//============================================================================


struct  BFu16s_BFs16ll_BFs16s_BFu16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16s_BFu16i) C1{ Fs:16 FL:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFs16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16s_BFu16i, BFu16s_BFs16ll_BFs16s_BFu16i)
//============================================================================


struct  BFu16s_BFs16ll_BFs16s_BFu16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16s_BFu16ll) C1{ Fs:16 FL:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16ll_BFs16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16s_BFu16ll, BFu16s_BFs16ll_BFs16s_BFu16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFs16s_BFu16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  signed short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFs16s_BFu16s) C1{ Fs:16 FL:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFs16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFs16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFs16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFs16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFs16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFs16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFs16s_BFu16s, BFu16s_BFs16ll_BFs16s_BFu16s)
//============================================================================


struct  BFu16s_BFs16ll_BFu16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16i) C1{ Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16i, BFu16s_BFs16ll_BFu16i)
//============================================================================


struct  BFu16s_BFs16ll_BFu16i_BFs16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16i_BFs16i) C1{ Fs:16 FL:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFu16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16i_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16i_BFs16i, BFu16s_BFs16ll_BFu16i_BFs16i)
//============================================================================


struct  BFu16s_BFs16ll_BFu16i_BFs16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16i_BFs16ll) C1{ Fs:16 FL:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16ll_BFu16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16i_BFs16ll, BFu16s_BFs16ll_BFu16i_BFs16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFu16i_BFs16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16i_BFs16s) C1{ Fs:16 FL:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFu16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16i_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16i_BFs16s, BFu16s_BFs16ll_BFu16i_BFs16s)
//============================================================================


struct  BFu16s_BFs16ll_BFu16i_BFu16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16i_BFu16i) C1{ Fs:16 FL:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16i_BFu16i, BFu16s_BFs16ll_BFu16i_BFu16i)
//============================================================================


struct  BFu16s_BFs16ll_BFu16i_BFu16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16i_BFu16ll) C1{ Fs:16 FL:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16ll_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16i_BFu16ll, BFu16s_BFs16ll_BFu16i_BFu16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFu16i_BFu16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16i_BFu16s) C1{ Fs:16 FL:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16i_BFu16s, BFu16s_BFs16ll_BFu16i_BFu16s)
//============================================================================


struct  BFu16s_BFs16ll_BFu16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16ll) C1{ Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFs16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16ll, BFu16s_BFs16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFu16ll_BFs16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  __tsu64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16ll_BFs16i) C1{ Fs:16 FL:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFu16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16ll_BFs16i, BFu16s_BFs16ll_BFu16ll_BFs16i)
//============================================================================


struct  BFu16s_BFs16ll_BFu16ll_BFs16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  __tsu64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16ll_BFs16ll) C1{ Fs:16 FL:16 FL:16 FL:16}



static void Test_BFu16s_BFs16ll_BFu16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16ll_BFs16ll, BFu16s_BFs16ll_BFu16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFu16ll_BFs16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  __tsu64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16ll_BFs16s) C1{ Fs:16 FL:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFu16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16ll_BFs16s, BFu16s_BFs16ll_BFu16ll_BFs16s)
//============================================================================


struct  BFu16s_BFs16ll_BFu16ll_BFu16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  __tsu64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16ll_BFu16i) C1{ Fs:16 FL:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16ll_BFu16i, BFu16s_BFs16ll_BFu16ll_BFu16i)
//============================================================================


struct  BFu16s_BFs16ll_BFu16ll_BFu16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  __tsu64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16ll_BFu16ll) C1{ Fs:16 FL:16 FL:16 FL:16}



static void Test_BFu16s_BFs16ll_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16ll_BFu16ll, BFu16s_BFs16ll_BFu16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFu16ll_BFu16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  __tsu64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16ll_BFu16s) C1{ Fs:16 FL:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16ll_BFu16s, BFu16s_BFs16ll_BFu16ll_BFu16s)
//============================================================================


struct  BFu16s_BFs16ll_BFu16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16s) C1{ Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16s, BFu16s_BFs16ll_BFu16s)
//============================================================================


struct  BFu16s_BFs16ll_BFu16s_BFs16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16s_BFs16i) C1{ Fs:16 FL:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFu16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16s_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16s_BFs16i, BFu16s_BFs16ll_BFu16s_BFs16i)
//============================================================================


struct  BFu16s_BFs16ll_BFu16s_BFs16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16s_BFs16ll) C1{ Fs:16 FL:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16ll_BFu16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16s_BFs16ll, BFu16s_BFs16ll_BFu16s_BFs16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFu16s_BFs16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16s_BFs16s) C1{ Fs:16 FL:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFu16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16s_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16s_BFs16s, BFu16s_BFs16ll_BFu16s_BFs16s)
//============================================================================


struct  BFu16s_BFs16ll_BFu16s_BFu16i  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16s_BFu16i) C1{ Fs:16 FL:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16ll_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16s_BFu16i, BFu16s_BFs16ll_BFu16s_BFu16i)
//============================================================================


struct  BFu16s_BFs16ll_BFu16s_BFu16ll  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16s_BFu16ll) C1{ Fs:16 FL:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16ll_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16s_BFu16ll, BFu16s_BFs16ll_BFu16s_BFu16ll)
//============================================================================


struct  BFu16s_BFs16ll_BFu16s_BFu16s  {
  unsigned short v1:16;
  signed __tsi64 v2:16;
  unsigned short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16ll_BFu16s_BFu16s) C1{ Fs:16 FL:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16ll_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16ll_BFu16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16ll_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16ll_BFu16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16ll_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16ll_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16ll_BFu16s_BFu16s, BFu16s_BFs16ll_BFu16s_BFu16s)
//============================================================================


struct  BFu16s_BFs16s  {
  unsigned short v1:16;
  signed short v2:16;
};
//SIG(1 BFu16s_BFs16s) C1{ Fs:16 Fs:16}



static void Test_BFu16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFs16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s, BFu16s_BFs16s)
//============================================================================


struct  BFu16s_BFs16s_BFs16i  {
  unsigned short v1:16;
  signed short v2:16;
  signed int v3:16;
};
//SIG(1 BFu16s_BFs16s_BFs16i) C1{ Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16i, BFu16s_BFs16s_BFs16i)
//============================================================================


struct  BFu16s_BFs16s_BFs16i_BFs16i  {
  unsigned short v1:16;
  signed short v2:16;
  signed int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16i_BFs16i) C1{ Fs:16 Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16s_BFs16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFs16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16i_BFs16i, BFu16s_BFs16s_BFs16i_BFs16i)
//============================================================================


struct  BFu16s_BFs16s_BFs16i_BFs16ll  {
  unsigned short v1:16;
  signed short v2:16;
  signed int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16i_BFs16ll) C1{ Fs:16 Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16s_BFs16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16i_BFs16ll, BFu16s_BFs16s_BFs16i_BFs16ll)
//============================================================================


struct  BFu16s_BFs16s_BFs16i_BFs16s  {
  unsigned short v1:16;
  signed short v2:16;
  signed int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16i_BFs16s) C1{ Fs:16 Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16s_BFs16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFs16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16i_BFs16s, BFu16s_BFs16s_BFs16i_BFs16s)
//============================================================================


struct  BFu16s_BFs16s_BFs16i_BFu16i  {
  unsigned short v1:16;
  signed short v2:16;
  signed int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16i_BFu16i) C1{ Fs:16 Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16s_BFs16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFs16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16i_BFu16i, BFu16s_BFs16s_BFs16i_BFu16i)
//============================================================================


struct  BFu16s_BFs16s_BFs16i_BFu16ll  {
  unsigned short v1:16;
  signed short v2:16;
  signed int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16i_BFu16ll) C1{ Fs:16 Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16s_BFs16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16i_BFu16ll, BFu16s_BFs16s_BFs16i_BFu16ll)
//============================================================================


struct  BFu16s_BFs16s_BFs16i_BFu16s  {
  unsigned short v1:16;
  signed short v2:16;
  signed int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16i_BFu16s) C1{ Fs:16 Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16s_BFs16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFs16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16i_BFu16s, BFu16s_BFs16s_BFs16i_BFu16s)
//============================================================================


struct  BFu16s_BFs16s_BFs16ll  {
  unsigned short v1:16;
  signed short v2:16;
  signed __tsi64 v3:16;
};
//SIG(1 BFu16s_BFs16s_BFs16ll) C1{ Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16ll, BFu16s_BFs16s_BFs16ll)
//============================================================================


struct  BFu16s_BFs16s_BFs16ll_BFs16i  {
  unsigned short v1:16;
  signed short v2:16;
  signed __tsi64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16ll_BFs16i) C1{ Fs:16 Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16s_BFs16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16ll_BFs16i, BFu16s_BFs16s_BFs16ll_BFs16i)
//============================================================================


struct  BFu16s_BFs16s_BFs16ll_BFs16ll  {
  unsigned short v1:16;
  signed short v2:16;
  signed __tsi64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16ll_BFs16ll) C1{ Fs:16 Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFs16s_BFs16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16ll_BFs16ll, BFu16s_BFs16s_BFs16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFs16s_BFs16ll_BFs16s  {
  unsigned short v1:16;
  signed short v2:16;
  signed __tsi64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16ll_BFs16s) C1{ Fs:16 Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16s_BFs16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16ll_BFs16s, BFu16s_BFs16s_BFs16ll_BFs16s)
//============================================================================


struct  BFu16s_BFs16s_BFs16ll_BFu16i  {
  unsigned short v1:16;
  signed short v2:16;
  signed __tsi64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16ll_BFu16i) C1{ Fs:16 Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16s_BFs16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16ll_BFu16i, BFu16s_BFs16s_BFs16ll_BFu16i)
//============================================================================


struct  BFu16s_BFs16s_BFs16ll_BFu16ll  {
  unsigned short v1:16;
  signed short v2:16;
  signed __tsi64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16ll_BFu16ll) C1{ Fs:16 Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFs16s_BFs16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16ll_BFu16ll, BFu16s_BFs16s_BFs16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFs16s_BFs16ll_BFu16s  {
  unsigned short v1:16;
  signed short v2:16;
  signed __tsi64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16ll_BFu16s) C1{ Fs:16 Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16s_BFs16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16ll_BFu16s, BFu16s_BFs16s_BFs16ll_BFu16s)
//============================================================================


struct  BFu16s_BFs16s_BFs16s  {
  unsigned short v1:16;
  signed short v2:16;
  signed short v3:16;
};
//SIG(1 BFu16s_BFs16s_BFs16s) C1{ Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFs16s_BFs16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFs16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16s, BFu16s_BFs16s_BFs16s)
//============================================================================


struct  BFu16s_BFs16s_BFs16s_BFs16i  {
  unsigned short v1:16;
  signed short v2:16;
  signed short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16s_BFs16i) C1{ Fs:16 Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16s_BFs16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFs16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16s_BFs16i, BFu16s_BFs16s_BFs16s_BFs16i)
//============================================================================


struct  BFu16s_BFs16s_BFs16s_BFs16ll  {
  unsigned short v1:16;
  signed short v2:16;
  signed short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16s_BFs16ll) C1{ Fs:16 Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16s_BFs16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16s_BFs16ll, BFu16s_BFs16s_BFs16s_BFs16ll)
//============================================================================


struct  BFu16s_BFs16s_BFs16s_BFs16s  {
  unsigned short v1:16;
  signed short v2:16;
  signed short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16s_BFs16s) C1{ Fs:16 Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16s_BFs16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16s_BFs16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFs16s_BFs16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16s_BFs16s, BFu16s_BFs16s_BFs16s_BFs16s)
//============================================================================


struct  BFu16s_BFs16s_BFs16s_BFu16i  {
  unsigned short v1:16;
  signed short v2:16;
  signed short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16s_BFu16i) C1{ Fs:16 Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16s_BFs16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFs16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16s_BFu16i, BFu16s_BFs16s_BFs16s_BFu16i)
//============================================================================


struct  BFu16s_BFs16s_BFs16s_BFu16ll  {
  unsigned short v1:16;
  signed short v2:16;
  signed short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16s_BFu16ll) C1{ Fs:16 Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16s_BFs16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFs16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16s_BFu16ll, BFu16s_BFs16s_BFs16s_BFu16ll)
//============================================================================


struct  BFu16s_BFs16s_BFs16s_BFu16s  {
  unsigned short v1:16;
  signed short v2:16;
  signed short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFs16s_BFu16s) C1{ Fs:16 Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16s_BFs16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFs16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFs16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFs16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFs16s_BFs16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFs16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFs16s_BFu16s, BFu16s_BFs16s_BFs16s_BFu16s)
//============================================================================


struct  BFu16s_BFs16s_BFu16i  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFs16s_BFu16i) C1{ Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16i, BFu16s_BFs16s_BFu16i)
//============================================================================


struct  BFu16s_BFs16s_BFu16i_BFs16i  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16i_BFs16i) C1{ Fs:16 Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16s_BFu16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFu16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16i_BFs16i, BFu16s_BFs16s_BFu16i_BFs16i)
//============================================================================


struct  BFu16s_BFs16s_BFu16i_BFs16ll  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16i_BFs16ll) C1{ Fs:16 Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16s_BFu16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16i_BFs16ll, BFu16s_BFs16s_BFu16i_BFs16ll)
//============================================================================


struct  BFu16s_BFs16s_BFu16i_BFs16s  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16i_BFs16s) C1{ Fs:16 Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16s_BFu16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFu16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16i_BFs16s, BFu16s_BFs16s_BFu16i_BFs16s)
//============================================================================


struct  BFu16s_BFs16s_BFu16i_BFu16i  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16i_BFu16i) C1{ Fs:16 Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFs16s_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16i_BFu16i, BFu16s_BFs16s_BFu16i_BFu16i)
//============================================================================


struct  BFu16s_BFs16s_BFu16i_BFu16ll  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16i_BFu16ll) C1{ Fs:16 Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFs16s_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16i_BFu16ll, BFu16s_BFs16s_BFu16i_BFu16ll)
//============================================================================


struct  BFu16s_BFs16s_BFu16i_BFu16s  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16i_BFu16s) C1{ Fs:16 Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFs16s_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16i_BFu16s, BFu16s_BFs16s_BFu16i_BFu16s)
//============================================================================


struct  BFu16s_BFs16s_BFu16ll  {
  unsigned short v1:16;
  signed short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFs16s_BFu16ll) C1{ Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16ll, BFu16s_BFs16s_BFu16ll)
//============================================================================


struct  BFu16s_BFs16s_BFu16ll_BFs16i  {
  unsigned short v1:16;
  signed short v2:16;
  __tsu64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16ll_BFs16i) C1{ Fs:16 Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16s_BFu16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16ll_BFs16i, BFu16s_BFs16s_BFu16ll_BFs16i)
//============================================================================


struct  BFu16s_BFs16s_BFu16ll_BFs16ll  {
  unsigned short v1:16;
  signed short v2:16;
  __tsu64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16ll_BFs16ll) C1{ Fs:16 Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFs16s_BFu16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16ll_BFs16ll, BFu16s_BFs16s_BFu16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFs16s_BFu16ll_BFs16s  {
  unsigned short v1:16;
  signed short v2:16;
  __tsu64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16ll_BFs16s) C1{ Fs:16 Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16s_BFu16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16ll_BFs16s, BFu16s_BFs16s_BFu16ll_BFs16s)
//============================================================================


struct  BFu16s_BFs16s_BFu16ll_BFu16i  {
  unsigned short v1:16;
  signed short v2:16;
  __tsu64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16ll_BFu16i) C1{ Fs:16 Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFs16s_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16ll_BFu16i, BFu16s_BFs16s_BFu16ll_BFu16i)
//============================================================================


struct  BFu16s_BFs16s_BFu16ll_BFu16ll  {
  unsigned short v1:16;
  signed short v2:16;
  __tsu64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16ll_BFu16ll) C1{ Fs:16 Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFs16s_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16ll_BFu16ll, BFu16s_BFs16s_BFu16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFs16s_BFu16ll_BFu16s  {
  unsigned short v1:16;
  signed short v2:16;
  __tsu64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16ll_BFu16s) C1{ Fs:16 Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFs16s_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16ll_BFu16s, BFu16s_BFs16s_BFu16ll_BFu16s)
//============================================================================


struct  BFu16s_BFs16s_BFu16s  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFs16s_BFu16s) C1{ Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFs16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFs16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16s, BFu16s_BFs16s_BFu16s)
//============================================================================


struct  BFu16s_BFs16s_BFu16s_BFs16i  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16s_BFs16i) C1{ Fs:16 Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16s_BFu16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFu16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16s_BFs16i, BFu16s_BFs16s_BFu16s_BFs16i)
//============================================================================


struct  BFu16s_BFs16s_BFu16s_BFs16ll  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16s_BFs16ll) C1{ Fs:16 Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16s_BFu16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16s_BFs16ll, BFu16s_BFs16s_BFu16s_BFs16ll)
//============================================================================


struct  BFu16s_BFs16s_BFu16s_BFs16s  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16s_BFs16s) C1{ Fs:16 Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16s_BFu16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16s_BFs16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFs16s_BFu16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16s_BFs16s, BFu16s_BFs16s_BFu16s_BFs16s)
//============================================================================


struct  BFu16s_BFs16s_BFu16s_BFu16i  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16s_BFu16i) C1{ Fs:16 Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFs16s_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFs16s_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16s_BFu16i, BFu16s_BFs16s_BFu16s_BFu16i)
//============================================================================


struct  BFu16s_BFs16s_BFu16s_BFu16ll  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16s_BFu16ll) C1{ Fs:16 Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFs16s_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFs16s_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16s_BFu16ll, BFu16s_BFs16s_BFu16s_BFu16ll)
//============================================================================


struct  BFu16s_BFs16s_BFu16s_BFu16s  {
  unsigned short v1:16;
  signed short v2:16;
  unsigned short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFs16s_BFu16s_BFu16s) C1{ Fs:16 Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFs16s_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFs16s_BFu16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFs16s_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFs16s_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFs16s_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_sll(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFs16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFs16s_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFs16s_BFu16s_BFu16s, BFu16s_BFs16s_BFu16s_BFu16s)
//============================================================================


struct  BFu16s_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu16s_BFu15i) C1{ Fs:16 Fi:15}



static void Test_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu15i");
    static STRUCT_IF_C BFu16s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i, BFu16s_BFu15i)
//============================================================================


struct  BFu16s_BFu15i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu15i_BFu15i) C1{ Fs:16 Fi:15 Fi:15}



static void Test_BFu16s_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu15i, BFu16s_BFu15i_BFu15i)
//============================================================================


struct  BFu16s_BFu15i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu15i_BFu15ll) C1{ Fs:16 Fi:15 FL:15}



static void Test_BFu16s_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu16s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu15ll, BFu16s_BFu15i_BFu15ll)
//============================================================================


struct  BFu16s_BFu15i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu15i_BFu15s) C1{ Fs:16 Fi:15 Fs:15}



static void Test_BFu16s_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu15s, BFu16s_BFu15i_BFu15s)
//============================================================================


struct  BFu16s_BFu15i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu15i_BFu16i) C1{ Fs:16 Fi:15 Fi:16}



static void Test_BFu16s_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu16i, BFu16s_BFu15i_BFu16i)
//============================================================================


struct  BFu16s_BFu15i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu15i_BFu16ll) C1{ Fs:16 Fi:15 FL:16}



static void Test_BFu16s_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu16s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu16ll, BFu16s_BFu15i_BFu16ll)
//============================================================================


struct  BFu16s_BFu15i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu15i_BFu16s) C1{ Fs:16 Fi:15 Fs:16}



static void Test_BFu16s_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu16s, BFu16s_BFu15i_BFu16s)
//============================================================================


struct  BFu16s_BFu15i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu15i_BFu17i) C1{ Fs:16 Fi:15 Fi:17}



static void Test_BFu16s_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu17i, BFu16s_BFu15i_BFu17i)
//============================================================================


struct  BFu16s_BFu15i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu15i_BFu17ll) C1{ Fs:16 Fi:15 FL:17}



static void Test_BFu16s_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu16s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu17ll, BFu16s_BFu15i_BFu17ll)
//============================================================================


struct  BFu16s_BFu15i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu15i_BFu1c) C1{ Fs:16 Fi:15 Fc:1}



static void Test_BFu16s_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu1c, BFu16s_BFu15i_BFu1c)
//============================================================================


struct  BFu16s_BFu15i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu15i_BFu1i) C1{ Fs:16 Fi:15 Fi:1}



static void Test_BFu16s_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu1i, BFu16s_BFu15i_BFu1i)
//============================================================================


struct  BFu16s_BFu15i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu15i_BFu1ll) C1{ Fs:16 Fi:15 FL:1}



static void Test_BFu16s_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu1ll, BFu16s_BFu15i_BFu1ll)
//============================================================================


struct  BFu16s_BFu15i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu15i_BFu1s) C1{ Fs:16 Fi:15 Fs:1}



static void Test_BFu16s_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu1s, BFu16s_BFu15i_BFu1s)
//============================================================================


struct  BFu16s_BFu15i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu15i_BFu31i) C1{ Fs:16 Fi:15 Fi:31}



static void Test_BFu16s_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu31i, BFu16s_BFu15i_BFu31i)
//============================================================================


struct  BFu16s_BFu15i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu15i_BFu31ll) C1{ Fs:16 Fi:15 FL:31}



static void Test_BFu16s_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu16s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu16s_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu31ll, BFu16s_BFu15i_BFu31ll)
//============================================================================


struct  BFu16s_BFu15i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu15i_BFu32i) C1{ Fs:16 Fi:15 Fi:32}



static void Test_BFu16s_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu32i, BFu16s_BFu15i_BFu32i)
//============================================================================


struct  BFu16s_BFu15i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu15i_BFu32ll) C1{ Fs:16 Fi:15 FL:32}



static void Test_BFu16s_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu16s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu16s_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu32ll, BFu16s_BFu15i_BFu32ll)
//============================================================================


struct  BFu16s_BFu15i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu15i_BFu33) C1{ Fs:16 Fi:15 FL:33}



static void Test_BFu16s_BFu15i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu33");
    static STRUCT_IF_C BFu16s_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu16s_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu16s_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu33, BFu16s_BFu15i_BFu33)
//============================================================================


struct  BFu16s_BFu15i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu15i_BFu7c) C1{ Fs:16 Fi:15 Fc:7}



static void Test_BFu16s_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu15i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu7c, BFu16s_BFu15i_BFu7c)
//============================================================================


struct  BFu16s_BFu15i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu15i_BFu7i) C1{ Fs:16 Fi:15 Fi:7}



static void Test_BFu16s_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu7i, BFu16s_BFu15i_BFu7i)
//============================================================================


struct  BFu16s_BFu15i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu15i_BFu7ll) C1{ Fs:16 Fi:15 FL:7}



static void Test_BFu16s_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu16s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu7ll, BFu16s_BFu15i_BFu7ll)
//============================================================================


struct  BFu16s_BFu15i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu15i_BFu7s) C1{ Fs:16 Fi:15 Fs:7}



static void Test_BFu16s_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu15i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu7s, BFu16s_BFu15i_BFu7s)
//============================================================================


struct  BFu16s_BFu15i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu15i_BFu8c) C1{ Fs:16 Fi:15 Fc:8}



static void Test_BFu16s_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu15i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu8c, BFu16s_BFu15i_BFu8c)
//============================================================================


struct  BFu16s_BFu15i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu15i_BFu8i) C1{ Fs:16 Fi:15 Fi:8}



static void Test_BFu16s_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu8i, BFu16s_BFu15i_BFu8i)
//============================================================================


struct  BFu16s_BFu15i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu15i_BFu8ll) C1{ Fs:16 Fi:15 FL:8}



static void Test_BFu16s_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu16s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu8ll, BFu16s_BFu15i_BFu8ll)
//============================================================================


struct  BFu16s_BFu15i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu15i_BFu8s) C1{ Fs:16 Fi:15 Fs:8}



static void Test_BFu16s_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu15i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu8s, BFu16s_BFu15i_BFu8s)
//============================================================================


struct  BFu16s_BFu15i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu15i_BFu9i) C1{ Fs:16 Fi:15 Fi:9}



static void Test_BFu16s_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu15i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu9i, BFu16s_BFu15i_BFu9i)
//============================================================================


struct  BFu16s_BFu15i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu15i_BFu9ll) C1{ Fs:16 Fi:15 FL:9}



static void Test_BFu16s_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu15i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu16s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu9ll, BFu16s_BFu15i_BFu9ll)
//============================================================================


struct  BFu16s_BFu15i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu15i_BFu9s) C1{ Fs:16 Fi:15 Fs:9}



static void Test_BFu16s_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu15i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu15i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_BFu9s, BFu16s_BFu15i_BFu9s)
//============================================================================


struct  BFu16s_BFu15i_C  {
  unsigned short v1:16;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu16s_BFu15i_C) C1{ Fs:16 Fi:15 Fc}



static void Test_BFu16s_BFu15i_C()
{
  {
    init_simple_test("BFu16s_BFu15i_C");
    static STRUCT_IF_C BFu16s_BFu15i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_C, BFu16s_BFu15i_C)
//============================================================================


struct  BFu16s_BFu15i_D  {
  unsigned short v1:16;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu16s_BFu15i_D) C1{ Fs:16 Fi:15 FL}



static void Test_BFu16s_BFu15i_D()
{
  {
    init_simple_test("BFu16s_BFu15i_D");
    static STRUCT_IF_C BFu16s_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_D, BFu16s_BFu15i_D)
//============================================================================


struct  BFu16s_BFu15i_F  {
  unsigned short v1:16;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu16s_BFu15i_F) C1{ Fs:16 Fi:15 Fi}



static void Test_BFu16s_BFu15i_F()
{
  {
    init_simple_test("BFu16s_BFu15i_F");
    static STRUCT_IF_C BFu16s_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_F, BFu16s_BFu15i_F)
//============================================================================


struct  BFu16s_BFu15i_I  {
  unsigned short v1:16;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu16s_BFu15i_I) C1{ Fs:16 Fi:15 Fi}



static void Test_BFu16s_BFu15i_I()
{
  {
    init_simple_test("BFu16s_BFu15i_I");
    static STRUCT_IF_C BFu16s_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_I, BFu16s_BFu15i_I)
//============================================================================


struct  BFu16s_BFu15i_Ip  {
  unsigned short v1:16;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu16s_BFu15i_Ip) C1{ Fs:16 Fi:15 Fp}



static void Test_BFu16s_BFu15i_Ip()
{
  {
    init_simple_test("BFu16s_BFu15i_Ip");
    static STRUCT_IF_C BFu16s_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_Ip, BFu16s_BFu15i_Ip)
//============================================================================


struct  BFu16s_BFu15i_L  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu15i_L) C1{ Fs:16 Fi:15 FL}



static void Test_BFu16s_BFu15i_L()
{
  {
    init_simple_test("BFu16s_BFu15i_L");
    static STRUCT_IF_C BFu16s_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_L, BFu16s_BFu15i_L)
//============================================================================


struct  BFu16s_BFu15i_S  {
  unsigned short v1:16;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu16s_BFu15i_S) C1{ Fs:16 Fi:15 Fs}



static void Test_BFu16s_BFu15i_S()
{
  {
    init_simple_test("BFu16s_BFu15i_S");
    static STRUCT_IF_C BFu16s_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_S, BFu16s_BFu15i_S)
//============================================================================


struct  BFu16s_BFu15i_Uc  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu15i_Uc) C1{ Fs:16 Fi:15 Fc}



static void Test_BFu16s_BFu15i_Uc()
{
  {
    init_simple_test("BFu16s_BFu15i_Uc");
    static STRUCT_IF_C BFu16s_BFu15i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_Uc, BFu16s_BFu15i_Uc)
//============================================================================


struct  BFu16s_BFu15i_Ui  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu15i_Ui) C1{ Fs:16 Fi:15 Fi}



static void Test_BFu16s_BFu15i_Ui()
{
  {
    init_simple_test("BFu16s_BFu15i_Ui");
    static STRUCT_IF_C BFu16s_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_Ui, BFu16s_BFu15i_Ui)
//============================================================================


struct  BFu16s_BFu15i_Ul  {
  unsigned short v1:16;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu15i_Ul) C1{ Fs:16 Fi:15 FL}



static void Test_BFu16s_BFu15i_Ul()
{
  {
    init_simple_test("BFu16s_BFu15i_Ul");
    static STRUCT_IF_C BFu16s_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_Ul, BFu16s_BFu15i_Ul)
//============================================================================


struct  BFu16s_BFu15i_Us  {
  unsigned short v1:16;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu15i_Us) C1{ Fs:16 Fi:15 Fs}



static void Test_BFu16s_BFu15i_Us()
{
  {
    init_simple_test("BFu16s_BFu15i_Us");
    static STRUCT_IF_C BFu16s_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_Us, BFu16s_BFu15i_Us)
//============================================================================


struct  BFu16s_BFu15i_Vp  {
  unsigned short v1:16;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu16s_BFu15i_Vp) C1{ Fs:16 Fi:15 Fp}



static void Test_BFu16s_BFu15i_Vp()
{
  {
    init_simple_test("BFu16s_BFu15i_Vp");
    static STRUCT_IF_C BFu16s_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15i_Vp, BFu16s_BFu15i_Vp)
//============================================================================


struct  BFu16s_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu16s_BFu15ll) C1{ Fs:16 FL:15}



static void Test_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll, BFu16s_BFu15ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu15ll_BFu15i) C1{ Fs:16 FL:15 Fi:15}



static void Test_BFu16s_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu15i, BFu16s_BFu15ll_BFu15i)
//============================================================================


struct  BFu16s_BFu15ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu15ll_BFu15ll) C1{ Fs:16 FL:15 FL:15}



static void Test_BFu16s_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu16s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu15ll, BFu16s_BFu15ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu15ll_BFu15s) C1{ Fs:16 FL:15 Fs:15}



static void Test_BFu16s_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu15s, BFu16s_BFu15ll_BFu15s)
//============================================================================


struct  BFu16s_BFu15ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu15ll_BFu16i) C1{ Fs:16 FL:15 Fi:16}



static void Test_BFu16s_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu16i, BFu16s_BFu15ll_BFu16i)
//============================================================================


struct  BFu16s_BFu15ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu15ll_BFu16ll) C1{ Fs:16 FL:15 FL:16}



static void Test_BFu16s_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu16s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu16ll, BFu16s_BFu15ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu15ll_BFu16s) C1{ Fs:16 FL:15 Fs:16}



static void Test_BFu16s_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu16s, BFu16s_BFu15ll_BFu16s)
//============================================================================


struct  BFu16s_BFu15ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu15ll_BFu17i) C1{ Fs:16 FL:15 Fi:17}



static void Test_BFu16s_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu17i, BFu16s_BFu15ll_BFu17i)
//============================================================================


struct  BFu16s_BFu15ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu15ll_BFu17ll) C1{ Fs:16 FL:15 FL:17}



static void Test_BFu16s_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu16s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu17ll, BFu16s_BFu15ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu15ll_BFu1c) C1{ Fs:16 FL:15 Fc:1}



static void Test_BFu16s_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu1c, BFu16s_BFu15ll_BFu1c)
//============================================================================


struct  BFu16s_BFu15ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu15ll_BFu1i) C1{ Fs:16 FL:15 Fi:1}



static void Test_BFu16s_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu1i, BFu16s_BFu15ll_BFu1i)
//============================================================================


struct  BFu16s_BFu15ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu15ll_BFu1ll) C1{ Fs:16 FL:15 FL:1}



static void Test_BFu16s_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu1ll, BFu16s_BFu15ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu15ll_BFu1s) C1{ Fs:16 FL:15 Fs:1}



static void Test_BFu16s_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu1s, BFu16s_BFu15ll_BFu1s)
//============================================================================


struct  BFu16s_BFu15ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu15ll_BFu31i) C1{ Fs:16 FL:15 Fi:31}



static void Test_BFu16s_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu31i, BFu16s_BFu15ll_BFu31i)
//============================================================================


struct  BFu16s_BFu15ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu15ll_BFu31ll) C1{ Fs:16 FL:15 FL:31}



static void Test_BFu16s_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu16s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu16s_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu31ll, BFu16s_BFu15ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu15ll_BFu32i) C1{ Fs:16 FL:15 Fi:32}



static void Test_BFu16s_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu32i, BFu16s_BFu15ll_BFu32i)
//============================================================================


struct  BFu16s_BFu15ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu15ll_BFu32ll) C1{ Fs:16 FL:15 FL:32}



static void Test_BFu16s_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu16s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu16s_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu32ll, BFu16s_BFu15ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu15ll_BFu33) C1{ Fs:16 FL:15 FL:33}



static void Test_BFu16s_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu16s_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu16s_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu33, BFu16s_BFu15ll_BFu33)
//============================================================================


struct  BFu16s_BFu15ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu15ll_BFu7c) C1{ Fs:16 FL:15 Fc:7}



static void Test_BFu16s_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu7c, BFu16s_BFu15ll_BFu7c)
//============================================================================


struct  BFu16s_BFu15ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu15ll_BFu7i) C1{ Fs:16 FL:15 Fi:7}



static void Test_BFu16s_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu7i, BFu16s_BFu15ll_BFu7i)
//============================================================================


struct  BFu16s_BFu15ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu15ll_BFu7ll) C1{ Fs:16 FL:15 FL:7}



static void Test_BFu16s_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu16s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu7ll, BFu16s_BFu15ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu15ll_BFu7s) C1{ Fs:16 FL:15 Fs:7}



static void Test_BFu16s_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu7s, BFu16s_BFu15ll_BFu7s)
//============================================================================


struct  BFu16s_BFu15ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu15ll_BFu8c) C1{ Fs:16 FL:15 Fc:8}



static void Test_BFu16s_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu8c, BFu16s_BFu15ll_BFu8c)
//============================================================================


struct  BFu16s_BFu15ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu15ll_BFu8i) C1{ Fs:16 FL:15 Fi:8}



static void Test_BFu16s_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu8i, BFu16s_BFu15ll_BFu8i)
//============================================================================


struct  BFu16s_BFu15ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu15ll_BFu8ll) C1{ Fs:16 FL:15 FL:8}



static void Test_BFu16s_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu16s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu8ll, BFu16s_BFu15ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu15ll_BFu8s) C1{ Fs:16 FL:15 Fs:8}



static void Test_BFu16s_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu8s, BFu16s_BFu15ll_BFu8s)
//============================================================================


struct  BFu16s_BFu15ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu15ll_BFu9i) C1{ Fs:16 FL:15 Fi:9}



static void Test_BFu16s_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu9i, BFu16s_BFu15ll_BFu9i)
//============================================================================


struct  BFu16s_BFu15ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu15ll_BFu9ll) C1{ Fs:16 FL:15 FL:9}



static void Test_BFu16s_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu16s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu9ll, BFu16s_BFu15ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu15ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu15ll_BFu9s) C1{ Fs:16 FL:15 Fs:9}



static void Test_BFu16s_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu15ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_BFu9s, BFu16s_BFu15ll_BFu9s)
//============================================================================


struct  BFu16s_BFu15ll_C  {
  unsigned short v1:16;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu16s_BFu15ll_C) C1{ Fs:16 FL:15 Fc}



static void Test_BFu16s_BFu15ll_C()
{
  {
    init_simple_test("BFu16s_BFu15ll_C");
    static STRUCT_IF_C BFu16s_BFu15ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_C, BFu16s_BFu15ll_C)
//============================================================================


struct  BFu16s_BFu15ll_D  {
  unsigned short v1:16;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu16s_BFu15ll_D) C1{ Fs:16 FL:15 FL}



static void Test_BFu16s_BFu15ll_D()
{
  {
    init_simple_test("BFu16s_BFu15ll_D");
    static STRUCT_IF_C BFu16s_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_D, BFu16s_BFu15ll_D)
//============================================================================


struct  BFu16s_BFu15ll_F  {
  unsigned short v1:16;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu16s_BFu15ll_F) C1{ Fs:16 FL:15 Fi}



static void Test_BFu16s_BFu15ll_F()
{
  {
    init_simple_test("BFu16s_BFu15ll_F");
    static STRUCT_IF_C BFu16s_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_F, BFu16s_BFu15ll_F)
//============================================================================


struct  BFu16s_BFu15ll_I  {
  unsigned short v1:16;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu16s_BFu15ll_I) C1{ Fs:16 FL:15 Fi}



static void Test_BFu16s_BFu15ll_I()
{
  {
    init_simple_test("BFu16s_BFu15ll_I");
    static STRUCT_IF_C BFu16s_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_I, BFu16s_BFu15ll_I)
//============================================================================


struct  BFu16s_BFu15ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu16s_BFu15ll_Ip) C1{ Fs:16 FL:15 Fp}



static void Test_BFu16s_BFu15ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu15ll_Ip");
    static STRUCT_IF_C BFu16s_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_Ip, BFu16s_BFu15ll_Ip)
//============================================================================


struct  BFu16s_BFu15ll_L  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu15ll_L) C1{ Fs:16 FL:15 FL}



static void Test_BFu16s_BFu15ll_L()
{
  {
    init_simple_test("BFu16s_BFu15ll_L");
    static STRUCT_IF_C BFu16s_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_L, BFu16s_BFu15ll_L)
//============================================================================


struct  BFu16s_BFu15ll_S  {
  unsigned short v1:16;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu16s_BFu15ll_S) C1{ Fs:16 FL:15 Fs}



static void Test_BFu16s_BFu15ll_S()
{
  {
    init_simple_test("BFu16s_BFu15ll_S");
    static STRUCT_IF_C BFu16s_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_S, BFu16s_BFu15ll_S)
//============================================================================


struct  BFu16s_BFu15ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu15ll_Uc) C1{ Fs:16 FL:15 Fc}



static void Test_BFu16s_BFu15ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu15ll_Uc");
    static STRUCT_IF_C BFu16s_BFu15ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_Uc, BFu16s_BFu15ll_Uc)
//============================================================================


struct  BFu16s_BFu15ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu15ll_Ui) C1{ Fs:16 FL:15 Fi}



static void Test_BFu16s_BFu15ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu15ll_Ui");
    static STRUCT_IF_C BFu16s_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_Ui, BFu16s_BFu15ll_Ui)
//============================================================================


struct  BFu16s_BFu15ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu15ll_Ul) C1{ Fs:16 FL:15 FL}



static void Test_BFu16s_BFu15ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu15ll_Ul");
    static STRUCT_IF_C BFu16s_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_Ul, BFu16s_BFu15ll_Ul)
//============================================================================


struct  BFu16s_BFu15ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu15ll_Us) C1{ Fs:16 FL:15 Fs}



static void Test_BFu16s_BFu15ll_Us()
{
  {
    init_simple_test("BFu16s_BFu15ll_Us");
    static STRUCT_IF_C BFu16s_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_Us, BFu16s_BFu15ll_Us)
//============================================================================


struct  BFu16s_BFu15ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu16s_BFu15ll_Vp) C1{ Fs:16 FL:15 Fp}



static void Test_BFu16s_BFu15ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu15ll_Vp");
    static STRUCT_IF_C BFu16s_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15ll_Vp, BFu16s_BFu15ll_Vp)
//============================================================================


struct  BFu16s_BFu15s  {
  unsigned short v1:16;
  unsigned short v2:15;
};
//SIG(1 BFu16s_BFu15s) C1{ Fs:16 Fs:15}



static void Test_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu15s");
    static STRUCT_IF_C BFu16s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s, BFu16s_BFu15s)
//============================================================================


struct  BFu16s_BFu15s_BFu15i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu15s_BFu15i) C1{ Fs:16 Fs:15 Fi:15}



static void Test_BFu16s_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu15i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu15i, BFu16s_BFu15s_BFu15i)
//============================================================================


struct  BFu16s_BFu15s_BFu15ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu15s_BFu15ll) C1{ Fs:16 Fs:15 FL:15}



static void Test_BFu16s_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu16s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu15ll, BFu16s_BFu15s_BFu15ll)
//============================================================================


struct  BFu16s_BFu15s_BFu15s  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu15s_BFu15s) C1{ Fs:16 Fs:15 Fs:15}



static void Test_BFu16s_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu15s");
    static STRUCT_IF_C BFu16s_BFu15s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu15s, BFu16s_BFu15s_BFu15s)
//============================================================================


struct  BFu16s_BFu15s_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu15s_BFu16i) C1{ Fs:16 Fs:15 Fi:16}



static void Test_BFu16s_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu16i, BFu16s_BFu15s_BFu16i)
//============================================================================


struct  BFu16s_BFu15s_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu15s_BFu16ll) C1{ Fs:16 Fs:15 FL:16}



static void Test_BFu16s_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu16s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu16ll, BFu16s_BFu15s_BFu16ll)
//============================================================================


struct  BFu16s_BFu15s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu15s_BFu16s) C1{ Fs:16 Fs:15 Fs:16}



static void Test_BFu16s_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu15s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu16s, BFu16s_BFu15s_BFu16s)
//============================================================================


struct  BFu16s_BFu15s_BFu17i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu15s_BFu17i) C1{ Fs:16 Fs:15 Fi:17}



static void Test_BFu16s_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu17i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu17i, BFu16s_BFu15s_BFu17i)
//============================================================================


struct  BFu16s_BFu15s_BFu17ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu15s_BFu17ll) C1{ Fs:16 Fs:15 FL:17}



static void Test_BFu16s_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu16s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu17ll, BFu16s_BFu15s_BFu17ll)
//============================================================================


struct  BFu16s_BFu15s_BFu1c  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu15s_BFu1c) C1{ Fs:16 Fs:15 Fc:1}



static void Test_BFu16s_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu1c");
    static STRUCT_IF_C BFu16s_BFu15s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu15s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu1c, BFu16s_BFu15s_BFu1c)
//============================================================================


struct  BFu16s_BFu15s_BFu1i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu15s_BFu1i) C1{ Fs:16 Fs:15 Fi:1}



static void Test_BFu16s_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu1i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu1i, BFu16s_BFu15s_BFu1i)
//============================================================================


struct  BFu16s_BFu15s_BFu1ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu15s_BFu1ll) C1{ Fs:16 Fs:15 FL:1}



static void Test_BFu16s_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu1ll, BFu16s_BFu15s_BFu1ll)
//============================================================================


struct  BFu16s_BFu15s_BFu1s  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu15s_BFu1s) C1{ Fs:16 Fs:15 Fs:1}



static void Test_BFu16s_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu1s");
    static STRUCT_IF_C BFu16s_BFu15s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu15s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu16s_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu1s, BFu16s_BFu15s_BFu1s)
//============================================================================


struct  BFu16s_BFu15s_BFu31i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu15s_BFu31i) C1{ Fs:16 Fs:15 Fi:31}



static void Test_BFu16s_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu31i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu31i, BFu16s_BFu15s_BFu31i)
//============================================================================


struct  BFu16s_BFu15s_BFu31ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu15s_BFu31ll) C1{ Fs:16 Fs:15 FL:31}



static void Test_BFu16s_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu16s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu16s_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu31ll, BFu16s_BFu15s_BFu31ll)
//============================================================================


struct  BFu16s_BFu15s_BFu32i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu15s_BFu32i) C1{ Fs:16 Fs:15 Fi:32}



static void Test_BFu16s_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu32i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu32i, BFu16s_BFu15s_BFu32i)
//============================================================================


struct  BFu16s_BFu15s_BFu32ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu15s_BFu32ll) C1{ Fs:16 Fs:15 FL:32}



static void Test_BFu16s_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu16s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu16s_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu32ll, BFu16s_BFu15s_BFu32ll)
//============================================================================


struct  BFu16s_BFu15s_BFu33  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu15s_BFu33) C1{ Fs:16 Fs:15 FL:33}



static void Test_BFu16s_BFu15s_BFu33()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu33");
    static STRUCT_IF_C BFu16s_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu16s_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu16s_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu33, BFu16s_BFu15s_BFu33)
//============================================================================


struct  BFu16s_BFu15s_BFu7c  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu15s_BFu7c) C1{ Fs:16 Fs:15 Fc:7}



static void Test_BFu16s_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu7c");
    static STRUCT_IF_C BFu16s_BFu15s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu7c, BFu16s_BFu15s_BFu7c)
//============================================================================


struct  BFu16s_BFu15s_BFu7i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu15s_BFu7i) C1{ Fs:16 Fs:15 Fi:7}



static void Test_BFu16s_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu7i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu7i, BFu16s_BFu15s_BFu7i)
//============================================================================


struct  BFu16s_BFu15s_BFu7ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu15s_BFu7ll) C1{ Fs:16 Fs:15 FL:7}



static void Test_BFu16s_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu16s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu7ll, BFu16s_BFu15s_BFu7ll)
//============================================================================


struct  BFu16s_BFu15s_BFu7s  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu15s_BFu7s) C1{ Fs:16 Fs:15 Fs:7}



static void Test_BFu16s_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu7s");
    static STRUCT_IF_C BFu16s_BFu15s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu7s, BFu16s_BFu15s_BFu7s)
//============================================================================


struct  BFu16s_BFu15s_BFu8c  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu15s_BFu8c) C1{ Fs:16 Fs:15 Fc:8}



static void Test_BFu16s_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu8c");
    static STRUCT_IF_C BFu16s_BFu15s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu8c, BFu16s_BFu15s_BFu8c)
//============================================================================


struct  BFu16s_BFu15s_BFu8i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu15s_BFu8i) C1{ Fs:16 Fs:15 Fi:8}



static void Test_BFu16s_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu8i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu8i, BFu16s_BFu15s_BFu8i)
//============================================================================


struct  BFu16s_BFu15s_BFu8ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu15s_BFu8ll) C1{ Fs:16 Fs:15 FL:8}



static void Test_BFu16s_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu16s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu8ll, BFu16s_BFu15s_BFu8ll)
//============================================================================


struct  BFu16s_BFu15s_BFu8s  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu15s_BFu8s) C1{ Fs:16 Fs:15 Fs:8}



static void Test_BFu16s_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu8s");
    static STRUCT_IF_C BFu16s_BFu15s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu8s, BFu16s_BFu15s_BFu8s)
//============================================================================


struct  BFu16s_BFu15s_BFu9i  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu15s_BFu9i) C1{ Fs:16 Fs:15 Fi:9}



static void Test_BFu16s_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu9i");
    static STRUCT_IF_C BFu16s_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu9i, BFu16s_BFu15s_BFu9i)
//============================================================================


struct  BFu16s_BFu15s_BFu9ll  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu15s_BFu9ll) C1{ Fs:16 Fs:15 FL:9}



static void Test_BFu16s_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu16s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu9ll, BFu16s_BFu15s_BFu9ll)
//============================================================================


struct  BFu16s_BFu15s_BFu9s  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu15s_BFu9s) C1{ Fs:16 Fs:15 Fs:9}



static void Test_BFu16s_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu15s_BFu9s");
    static STRUCT_IF_C BFu16s_BFu15s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_BFu9s, BFu16s_BFu15s_BFu9s)
//============================================================================


struct  BFu16s_BFu15s_C  {
  unsigned short v1:16;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu16s_BFu15s_C) C1{ Fs:16 Fs:15 Fc}



static void Test_BFu16s_BFu15s_C()
{
  {
    init_simple_test("BFu16s_BFu15s_C");
    static STRUCT_IF_C BFu16s_BFu15s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_C, BFu16s_BFu15s_C)
//============================================================================


struct  BFu16s_BFu15s_D  {
  unsigned short v1:16;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu16s_BFu15s_D) C1{ Fs:16 Fs:15 FL}



static void Test_BFu16s_BFu15s_D()
{
  {
    init_simple_test("BFu16s_BFu15s_D");
    static STRUCT_IF_C BFu16s_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_D, BFu16s_BFu15s_D)
//============================================================================


struct  BFu16s_BFu15s_F  {
  unsigned short v1:16;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu16s_BFu15s_F) C1{ Fs:16 Fs:15 Fi}



static void Test_BFu16s_BFu15s_F()
{
  {
    init_simple_test("BFu16s_BFu15s_F");
    static STRUCT_IF_C BFu16s_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_F, BFu16s_BFu15s_F)
//============================================================================


struct  BFu16s_BFu15s_I  {
  unsigned short v1:16;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu16s_BFu15s_I) C1{ Fs:16 Fs:15 Fi}



static void Test_BFu16s_BFu15s_I()
{
  {
    init_simple_test("BFu16s_BFu15s_I");
    static STRUCT_IF_C BFu16s_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_I, BFu16s_BFu15s_I)
//============================================================================


struct  BFu16s_BFu15s_Ip  {
  unsigned short v1:16;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu16s_BFu15s_Ip) C1{ Fs:16 Fs:15 Fp}



static void Test_BFu16s_BFu15s_Ip()
{
  {
    init_simple_test("BFu16s_BFu15s_Ip");
    static STRUCT_IF_C BFu16s_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_Ip, BFu16s_BFu15s_Ip)
//============================================================================


struct  BFu16s_BFu15s_L  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu15s_L) C1{ Fs:16 Fs:15 FL}



static void Test_BFu16s_BFu15s_L()
{
  {
    init_simple_test("BFu16s_BFu15s_L");
    static STRUCT_IF_C BFu16s_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_L, BFu16s_BFu15s_L)
//============================================================================


struct  BFu16s_BFu15s_S  {
  unsigned short v1:16;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu16s_BFu15s_S) C1{ Fs:16 Fs:15 Fs}



static void Test_BFu16s_BFu15s_S()
{
  {
    init_simple_test("BFu16s_BFu15s_S");
    static STRUCT_IF_C BFu16s_BFu15s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_S, BFu16s_BFu15s_S)
//============================================================================


struct  BFu16s_BFu15s_Uc  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu15s_Uc) C1{ Fs:16 Fs:15 Fc}



static void Test_BFu16s_BFu15s_Uc()
{
  {
    init_simple_test("BFu16s_BFu15s_Uc");
    static STRUCT_IF_C BFu16s_BFu15s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_Uc, BFu16s_BFu15s_Uc)
//============================================================================


struct  BFu16s_BFu15s_Ui  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu15s_Ui) C1{ Fs:16 Fs:15 Fi}



static void Test_BFu16s_BFu15s_Ui()
{
  {
    init_simple_test("BFu16s_BFu15s_Ui");
    static STRUCT_IF_C BFu16s_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_Ui, BFu16s_BFu15s_Ui)
//============================================================================


struct  BFu16s_BFu15s_Ul  {
  unsigned short v1:16;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu15s_Ul) C1{ Fs:16 Fs:15 FL}



static void Test_BFu16s_BFu15s_Ul()
{
  {
    init_simple_test("BFu16s_BFu15s_Ul");
    static STRUCT_IF_C BFu16s_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_Ul, BFu16s_BFu15s_Ul)
//============================================================================


struct  BFu16s_BFu15s_Us  {
  unsigned short v1:16;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu15s_Us) C1{ Fs:16 Fs:15 Fs}



static void Test_BFu16s_BFu15s_Us()
{
  {
    init_simple_test("BFu16s_BFu15s_Us");
    static STRUCT_IF_C BFu16s_BFu15s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_Us, BFu16s_BFu15s_Us)
//============================================================================


struct  BFu16s_BFu15s_Vp  {
  unsigned short v1:16;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu16s_BFu15s_Vp) C1{ Fs:16 Fs:15 Fp}



static void Test_BFu16s_BFu15s_Vp()
{
  {
    init_simple_test("BFu16s_BFu15s_Vp");
    static STRUCT_IF_C BFu16s_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu15s_Vp, BFu16s_BFu15s_Vp)
//============================================================================


struct  BFu16s_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu16s_BFu16i) C1{ Fs:16 Fi:16}



static void Test_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i, BFu16s_BFu16i)
//============================================================================


struct  BFu16s_BFu16i_BFs16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed int v3:16;
};
//SIG(1 BFu16s_BFu16i_BFs16i) C1{ Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16i, BFu16s_BFu16i_BFs16i)
//============================================================================


struct  BFu16s_BFu16i_BFs16i_BFs16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16i_BFs16i) C1{ Fs:16 Fi:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16i_BFs16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16i_BFs16i, BFu16s_BFu16i_BFs16i_BFs16i)
//============================================================================


struct  BFu16s_BFu16i_BFs16i_BFs16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16i_BFs16ll) C1{ Fs:16 Fi:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16i_BFs16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16i_BFs16ll, BFu16s_BFu16i_BFs16i_BFs16ll)
//============================================================================


struct  BFu16s_BFu16i_BFs16i_BFs16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16i_BFs16s) C1{ Fs:16 Fi:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16i_BFs16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16i_BFs16s, BFu16s_BFu16i_BFs16i_BFs16s)
//============================================================================


struct  BFu16s_BFu16i_BFs16i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16i_BFu16i) C1{ Fs:16 Fi:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16i_BFs16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16i_BFu16i, BFu16s_BFu16i_BFs16i_BFu16i)
//============================================================================


struct  BFu16s_BFu16i_BFs16i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16i_BFu16ll) C1{ Fs:16 Fi:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16i_BFs16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16i_BFu16ll, BFu16s_BFu16i_BFs16i_BFu16ll)
//============================================================================


struct  BFu16s_BFu16i_BFs16i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16i_BFu16s) C1{ Fs:16 Fi:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16i_BFs16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16i_BFu16s, BFu16s_BFu16i_BFs16i_BFu16s)
//============================================================================


struct  BFu16s_BFu16i_BFs16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed __tsi64 v3:16;
};
//SIG(1 BFu16s_BFu16i_BFs16ll) C1{ Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16ll, BFu16s_BFu16i_BFs16ll)
//============================================================================


struct  BFu16s_BFu16i_BFs16ll_BFs16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed __tsi64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16ll_BFs16i) C1{ Fs:16 Fi:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16i_BFs16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16ll_BFs16i, BFu16s_BFu16i_BFs16ll_BFs16i)
//============================================================================


struct  BFu16s_BFu16i_BFs16ll_BFs16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed __tsi64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16ll_BFs16ll) C1{ Fs:16 Fi:16 FL:16 FL:16}



static void Test_BFu16s_BFu16i_BFs16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16ll_BFs16ll, BFu16s_BFu16i_BFs16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFu16i_BFs16ll_BFs16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed __tsi64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16ll_BFs16s) C1{ Fs:16 Fi:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16i_BFs16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16ll_BFs16s, BFu16s_BFu16i_BFs16ll_BFs16s)
//============================================================================


struct  BFu16s_BFu16i_BFs16ll_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed __tsi64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16ll_BFu16i) C1{ Fs:16 Fi:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16i_BFs16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16ll_BFu16i, BFu16s_BFu16i_BFs16ll_BFu16i)
//============================================================================


struct  BFu16s_BFu16i_BFs16ll_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed __tsi64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16ll_BFu16ll) C1{ Fs:16 Fi:16 FL:16 FL:16}



static void Test_BFu16s_BFu16i_BFs16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16ll_BFu16ll, BFu16s_BFu16i_BFs16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu16i_BFs16ll_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed __tsi64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16ll_BFu16s) C1{ Fs:16 Fi:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16i_BFs16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16ll_BFu16s, BFu16s_BFu16i_BFs16ll_BFu16s)
//============================================================================


struct  BFu16s_BFu16i_BFs16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed short v3:16;
};
//SIG(1 BFu16s_BFu16i_BFs16s) C1{ Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16s, BFu16s_BFu16i_BFs16s)
//============================================================================


struct  BFu16s_BFu16i_BFs16s_BFs16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16s_BFs16i) C1{ Fs:16 Fi:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16i_BFs16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16s_BFs16i, BFu16s_BFu16i_BFs16s_BFs16i)
//============================================================================


struct  BFu16s_BFu16i_BFs16s_BFs16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16s_BFs16ll) C1{ Fs:16 Fi:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16i_BFs16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16s_BFs16ll, BFu16s_BFu16i_BFs16s_BFs16ll)
//============================================================================


struct  BFu16s_BFu16i_BFs16s_BFs16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16s_BFs16s) C1{ Fs:16 Fi:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16i_BFs16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16s_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16s_BFs16s, BFu16s_BFu16i_BFs16s_BFs16s)
//============================================================================


struct  BFu16s_BFu16i_BFs16s_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16s_BFu16i) C1{ Fs:16 Fi:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16i_BFs16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16s_BFu16i, BFu16s_BFu16i_BFs16s_BFu16i)
//============================================================================


struct  BFu16s_BFu16i_BFs16s_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16s_BFu16ll) C1{ Fs:16 Fi:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16i_BFs16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFs16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16s_BFu16ll, BFu16s_BFu16i_BFs16s_BFu16ll)
//============================================================================


struct  BFu16s_BFu16i_BFs16s_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  signed short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFs16s_BFu16s) C1{ Fs:16 Fi:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16i_BFs16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFs16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFs16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFs16s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFs16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFs16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFs16s_BFu16s, BFu16s_BFu16i_BFs16s_BFu16s)
//============================================================================


struct  BFu16s_BFu16i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu16i_BFu15i) C1{ Fs:16 Fi:16 Fi:15}



static void Test_BFu16s_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu15i, BFu16s_BFu16i_BFu15i)
//============================================================================


struct  BFu16s_BFu16i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu16i_BFu15ll) C1{ Fs:16 Fi:16 FL:15}



static void Test_BFu16s_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu15ll, BFu16s_BFu16i_BFu15ll)
//============================================================================


struct  BFu16s_BFu16i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu16i_BFu15s) C1{ Fs:16 Fi:16 Fs:15}



static void Test_BFu16s_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu15s, BFu16s_BFu16i_BFu15s)
//============================================================================


struct  BFu16s_BFu16i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu16i_BFu16i) C1{ Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16i, BFu16s_BFu16i_BFu16i)
//============================================================================


struct  BFu16s_BFu16i_BFu16i_BFs16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16i_BFs16i) C1{ Fs:16 Fi:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16i_BFu16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16i_BFs16i, BFu16s_BFu16i_BFu16i_BFs16i)
//============================================================================


struct  BFu16s_BFu16i_BFu16i_BFs16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16i_BFs16ll) C1{ Fs:16 Fi:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16i_BFu16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16i_BFs16ll, BFu16s_BFu16i_BFu16i_BFs16ll)
//============================================================================


struct  BFu16s_BFu16i_BFu16i_BFs16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16i_BFs16s) C1{ Fs:16 Fi:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16i_BFu16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16i_BFs16s, BFu16s_BFu16i_BFu16i_BFs16s)
//============================================================================


struct  BFu16s_BFu16i_BFu16i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16i_BFu16i) C1{ Fs:16 Fi:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16i_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16i_BFu16i, BFu16s_BFu16i_BFu16i_BFu16i)
//============================================================================


struct  BFu16s_BFu16i_BFu16i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16i_BFu16ll) C1{ Fs:16 Fi:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16i_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16i_BFu16ll, BFu16s_BFu16i_BFu16i_BFu16ll)
//============================================================================


struct  BFu16s_BFu16i_BFu16i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16i_BFu16s) C1{ Fs:16 Fi:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16i_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16i_BFu16s, BFu16s_BFu16i_BFu16i_BFu16s)
//============================================================================


struct  BFu16s_BFu16i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu16i_BFu16ll) C1{ Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16ll, BFu16s_BFu16i_BFu16ll)
//============================================================================


struct  BFu16s_BFu16i_BFu16ll_BFs16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16ll_BFs16i) C1{ Fs:16 Fi:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16i_BFu16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16ll_BFs16i, BFu16s_BFu16i_BFu16ll_BFs16i)
//============================================================================


struct  BFu16s_BFu16i_BFu16ll_BFs16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16ll_BFs16ll) C1{ Fs:16 Fi:16 FL:16 FL:16}



static void Test_BFu16s_BFu16i_BFu16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16ll_BFs16ll, BFu16s_BFu16i_BFu16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFu16i_BFu16ll_BFs16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16ll_BFs16s) C1{ Fs:16 Fi:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16i_BFu16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16ll_BFs16s, BFu16s_BFu16i_BFu16ll_BFs16s)
//============================================================================


struct  BFu16s_BFu16i_BFu16ll_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16ll_BFu16i) C1{ Fs:16 Fi:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16i_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16ll_BFu16i, BFu16s_BFu16i_BFu16ll_BFu16i)
//============================================================================


struct  BFu16s_BFu16i_BFu16ll_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16ll_BFu16ll) C1{ Fs:16 Fi:16 FL:16 FL:16}



static void Test_BFu16s_BFu16i_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16ll_BFu16ll, BFu16s_BFu16i_BFu16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu16i_BFu16ll_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16ll_BFu16s) C1{ Fs:16 Fi:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16i_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16ll_BFu16s, BFu16s_BFu16i_BFu16ll_BFu16s)
//============================================================================


struct  BFu16s_BFu16i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu16i_BFu16s) C1{ Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16s, BFu16s_BFu16i_BFu16s)
//============================================================================


struct  BFu16s_BFu16i_BFu16s_BFs16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16s_BFs16i) C1{ Fs:16 Fi:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16i_BFu16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16s_BFs16i, BFu16s_BFu16i_BFu16s_BFs16i)
//============================================================================


struct  BFu16s_BFu16i_BFu16s_BFs16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16s_BFs16ll) C1{ Fs:16 Fi:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16i_BFu16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16s_BFs16ll, BFu16s_BFu16i_BFu16s_BFs16ll)
//============================================================================


struct  BFu16s_BFu16i_BFu16s_BFs16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16s_BFs16s) C1{ Fs:16 Fi:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16i_BFu16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16s_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16i_BFu16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16s_BFs16s, BFu16s_BFu16i_BFu16s_BFs16s)
//============================================================================


struct  BFu16s_BFu16i_BFu16s_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16s_BFu16i) C1{ Fs:16 Fi:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16i_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16s_BFu16i, BFu16s_BFu16i_BFu16s_BFu16i)
//============================================================================


struct  BFu16s_BFu16i_BFu16s_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16s_BFu16ll) C1{ Fs:16 Fi:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16i_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16s_BFu16ll, BFu16s_BFu16i_BFu16s_BFu16ll)
//============================================================================


struct  BFu16s_BFu16i_BFu16s_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16i_BFu16s_BFu16s) C1{ Fs:16 Fi:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16i_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu16s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16i_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu16s_BFu16s, BFu16s_BFu16i_BFu16s_BFu16s)
//============================================================================


struct  BFu16s_BFu16i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu16i_BFu17i) C1{ Fs:16 Fi:16 Fi:17}



static void Test_BFu16s_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu17i, BFu16s_BFu16i_BFu17i)
//============================================================================


struct  BFu16s_BFu16i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu16i_BFu17ll) C1{ Fs:16 Fi:16 FL:17}



static void Test_BFu16s_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu17ll, BFu16s_BFu16i_BFu17ll)
//============================================================================


struct  BFu16s_BFu16i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu16i_BFu1c) C1{ Fs:16 Fi:16 Fc:1}



static void Test_BFu16s_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu16i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu1c, BFu16s_BFu16i_BFu1c)
//============================================================================


struct  BFu16s_BFu16i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu16i_BFu1i) C1{ Fs:16 Fi:16 Fi:1}



static void Test_BFu16s_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu1i, BFu16s_BFu16i_BFu1i)
//============================================================================


struct  BFu16s_BFu16i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu16i_BFu1ll) C1{ Fs:16 Fi:16 FL:1}



static void Test_BFu16s_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu1ll, BFu16s_BFu16i_BFu1ll)
//============================================================================


struct  BFu16s_BFu16i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu16i_BFu1s) C1{ Fs:16 Fi:16 Fs:1}



static void Test_BFu16s_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu1s, BFu16s_BFu16i_BFu1s)
//============================================================================


struct  BFu16s_BFu16i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu16i_BFu31i) C1{ Fs:16 Fi:16 Fi:31}



static void Test_BFu16s_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu31i, BFu16s_BFu16i_BFu31i)
//============================================================================


struct  BFu16s_BFu16i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu16i_BFu31ll) C1{ Fs:16 Fi:16 FL:31}



static void Test_BFu16s_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu31ll, BFu16s_BFu16i_BFu31ll)
//============================================================================


struct  BFu16s_BFu16i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu16i_BFu32i) C1{ Fs:16 Fi:16 Fi:32}



static void Test_BFu16s_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu32i, BFu16s_BFu16i_BFu32i)
//============================================================================


struct  BFu16s_BFu16i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu16i_BFu32ll) C1{ Fs:16 Fi:16 FL:32}



static void Test_BFu16s_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu32ll, BFu16s_BFu16i_BFu32ll)
//============================================================================


struct  BFu16s_BFu16i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu16i_BFu33) C1{ Fs:16 Fi:16 FL:33}



static void Test_BFu16s_BFu16i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu33");
    static STRUCT_IF_C BFu16s_BFu16i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu16s_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu16s_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu33, BFu16s_BFu16i_BFu33)
//============================================================================


struct  BFu16s_BFu16i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu16i_BFu7c) C1{ Fs:16 Fi:16 Fc:7}



static void Test_BFu16s_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu16i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu7c, BFu16s_BFu16i_BFu7c)
//============================================================================


struct  BFu16s_BFu16i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu16i_BFu7i) C1{ Fs:16 Fi:16 Fi:7}



static void Test_BFu16s_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu7i, BFu16s_BFu16i_BFu7i)
//============================================================================


struct  BFu16s_BFu16i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu16i_BFu7ll) C1{ Fs:16 Fi:16 FL:7}



static void Test_BFu16s_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu7ll, BFu16s_BFu16i_BFu7ll)
//============================================================================


struct  BFu16s_BFu16i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu16i_BFu7s) C1{ Fs:16 Fi:16 Fs:7}



static void Test_BFu16s_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu7s, BFu16s_BFu16i_BFu7s)
//============================================================================


struct  BFu16s_BFu16i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu16i_BFu8c) C1{ Fs:16 Fi:16 Fc:8}



static void Test_BFu16s_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu16i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu8c, BFu16s_BFu16i_BFu8c)
//============================================================================


struct  BFu16s_BFu16i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu16i_BFu8i) C1{ Fs:16 Fi:16 Fi:8}



static void Test_BFu16s_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu8i, BFu16s_BFu16i_BFu8i)
//============================================================================


struct  BFu16s_BFu16i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu16i_BFu8ll) C1{ Fs:16 Fi:16 FL:8}



static void Test_BFu16s_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu8ll, BFu16s_BFu16i_BFu8ll)
//============================================================================


struct  BFu16s_BFu16i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu16i_BFu8s) C1{ Fs:16 Fi:16 Fs:8}



static void Test_BFu16s_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu8s, BFu16s_BFu16i_BFu8s)
//============================================================================


struct  BFu16s_BFu16i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu16i_BFu9i) C1{ Fs:16 Fi:16 Fi:9}



static void Test_BFu16s_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu9i, BFu16s_BFu16i_BFu9i)
//============================================================================


struct  BFu16s_BFu16i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu16i_BFu9ll) C1{ Fs:16 Fi:16 FL:9}



static void Test_BFu16s_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu9ll, BFu16s_BFu16i_BFu9ll)
//============================================================================


struct  BFu16s_BFu16i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu16i_BFu9s) C1{ Fs:16 Fi:16 Fs:9}



static void Test_BFu16s_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu16i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_BFu9s, BFu16s_BFu16i_BFu9s)
//============================================================================


struct  BFu16s_BFu16i_C  {
  unsigned short v1:16;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu16s_BFu16i_C) C1{ Fs:16 Fi:16 Fc}



static void Test_BFu16s_BFu16i_C()
{
  {
    init_simple_test("BFu16s_BFu16i_C");
    static STRUCT_IF_C BFu16s_BFu16i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_C, BFu16s_BFu16i_C)
//============================================================================


struct  BFu16s_BFu16i_D  {
  unsigned short v1:16;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu16s_BFu16i_D) C1{ Fs:16 Fi:16 FL}



static void Test_BFu16s_BFu16i_D()
{
  {
    init_simple_test("BFu16s_BFu16i_D");
    static STRUCT_IF_C BFu16s_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_D, BFu16s_BFu16i_D)
//============================================================================


struct  BFu16s_BFu16i_F  {
  unsigned short v1:16;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu16s_BFu16i_F) C1{ Fs:16 Fi:16 Fi}



static void Test_BFu16s_BFu16i_F()
{
  {
    init_simple_test("BFu16s_BFu16i_F");
    static STRUCT_IF_C BFu16s_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_F, BFu16s_BFu16i_F)
//============================================================================


struct  BFu16s_BFu16i_I  {
  unsigned short v1:16;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu16s_BFu16i_I) C1{ Fs:16 Fi:16 Fi}



static void Test_BFu16s_BFu16i_I()
{
  {
    init_simple_test("BFu16s_BFu16i_I");
    static STRUCT_IF_C BFu16s_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_I, BFu16s_BFu16i_I)
//============================================================================


struct  BFu16s_BFu16i_Ip  {
  unsigned short v1:16;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu16s_BFu16i_Ip) C1{ Fs:16 Fi:16 Fp}



static void Test_BFu16s_BFu16i_Ip()
{
  {
    init_simple_test("BFu16s_BFu16i_Ip");
    static STRUCT_IF_C BFu16s_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_Ip, BFu16s_BFu16i_Ip)
//============================================================================


struct  BFu16s_BFu16i_L  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu16i_L) C1{ Fs:16 Fi:16 FL}



static void Test_BFu16s_BFu16i_L()
{
  {
    init_simple_test("BFu16s_BFu16i_L");
    static STRUCT_IF_C BFu16s_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_L, BFu16s_BFu16i_L)
//============================================================================


struct  BFu16s_BFu16i_S  {
  unsigned short v1:16;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu16s_BFu16i_S) C1{ Fs:16 Fi:16 Fs}



static void Test_BFu16s_BFu16i_S()
{
  {
    init_simple_test("BFu16s_BFu16i_S");
    static STRUCT_IF_C BFu16s_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_S, BFu16s_BFu16i_S)
//============================================================================


struct  BFu16s_BFu16i_Uc  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu16i_Uc) C1{ Fs:16 Fi:16 Fc}



static void Test_BFu16s_BFu16i_Uc()
{
  {
    init_simple_test("BFu16s_BFu16i_Uc");
    static STRUCT_IF_C BFu16s_BFu16i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_Uc, BFu16s_BFu16i_Uc)
//============================================================================


struct  BFu16s_BFu16i_Ui  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu16i_Ui) C1{ Fs:16 Fi:16 Fi}



static void Test_BFu16s_BFu16i_Ui()
{
  {
    init_simple_test("BFu16s_BFu16i_Ui");
    static STRUCT_IF_C BFu16s_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_Ui, BFu16s_BFu16i_Ui)
//============================================================================


struct  BFu16s_BFu16i_Ul  {
  unsigned short v1:16;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu16i_Ul) C1{ Fs:16 Fi:16 FL}



static void Test_BFu16s_BFu16i_Ul()
{
  {
    init_simple_test("BFu16s_BFu16i_Ul");
    static STRUCT_IF_C BFu16s_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_Ul, BFu16s_BFu16i_Ul)
//============================================================================


struct  BFu16s_BFu16i_Us  {
  unsigned short v1:16;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu16i_Us) C1{ Fs:16 Fi:16 Fs}



static void Test_BFu16s_BFu16i_Us()
{
  {
    init_simple_test("BFu16s_BFu16i_Us");
    static STRUCT_IF_C BFu16s_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_Us, BFu16s_BFu16i_Us)
//============================================================================


struct  BFu16s_BFu16i_Vp  {
  unsigned short v1:16;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu16s_BFu16i_Vp) C1{ Fs:16 Fi:16 Fp}



static void Test_BFu16s_BFu16i_Vp()
{
  {
    init_simple_test("BFu16s_BFu16i_Vp");
    static STRUCT_IF_C BFu16s_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16i_Vp, BFu16s_BFu16i_Vp)
//============================================================================


struct  BFu16s_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu16s_BFu16ll) C1{ Fs:16 FL:16}



static void Test_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll, BFu16s_BFu16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFs16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed int v3:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16i) C1{ Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16i, BFu16s_BFu16ll_BFs16i)
//============================================================================


struct  BFu16s_BFu16ll_BFs16i_BFs16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16i_BFs16i) C1{ Fs:16 FL:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFs16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16i_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16i_BFs16i, BFu16s_BFu16ll_BFs16i_BFs16i)
//============================================================================


struct  BFu16s_BFu16ll_BFs16i_BFs16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16i_BFs16ll) C1{ Fs:16 FL:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16ll_BFs16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16i_BFs16ll, BFu16s_BFu16ll_BFs16i_BFs16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFs16i_BFs16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16i_BFs16s) C1{ Fs:16 FL:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFs16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16i_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16i_BFs16s, BFu16s_BFu16ll_BFs16i_BFs16s)
//============================================================================


struct  BFu16s_BFu16ll_BFs16i_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16i_BFu16i) C1{ Fs:16 FL:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFs16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16i_BFu16i, BFu16s_BFu16ll_BFs16i_BFu16i)
//============================================================================


struct  BFu16s_BFu16ll_BFs16i_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16i_BFu16ll) C1{ Fs:16 FL:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16ll_BFs16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16i_BFu16ll, BFu16s_BFu16ll_BFs16i_BFu16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFs16i_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16i_BFu16s) C1{ Fs:16 FL:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFs16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16i_BFu16s, BFu16s_BFu16ll_BFs16i_BFu16s)
//============================================================================


struct  BFu16s_BFu16ll_BFs16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed __tsi64 v3:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16ll) C1{ Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFu16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16ll, BFu16s_BFu16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFs16ll_BFs16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed __tsi64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16ll_BFs16i) C1{ Fs:16 FL:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFs16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16ll_BFs16i, BFu16s_BFu16ll_BFs16ll_BFs16i)
//============================================================================


struct  BFu16s_BFu16ll_BFs16ll_BFs16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed __tsi64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16ll_BFs16ll) C1{ Fs:16 FL:16 FL:16 FL:16}



static void Test_BFu16s_BFu16ll_BFs16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16ll_BFs16ll, BFu16s_BFu16ll_BFs16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFs16ll_BFs16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed __tsi64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16ll_BFs16s) C1{ Fs:16 FL:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFs16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16ll_BFs16s, BFu16s_BFu16ll_BFs16ll_BFs16s)
//============================================================================


struct  BFu16s_BFu16ll_BFs16ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed __tsi64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16ll_BFu16i) C1{ Fs:16 FL:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFs16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16ll_BFu16i, BFu16s_BFu16ll_BFs16ll_BFu16i)
//============================================================================


struct  BFu16s_BFu16ll_BFs16ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed __tsi64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16ll_BFu16ll) C1{ Fs:16 FL:16 FL:16 FL:16}



static void Test_BFu16s_BFu16ll_BFs16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16ll_BFu16ll, BFu16s_BFu16ll_BFs16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFs16ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed __tsi64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16ll_BFu16s) C1{ Fs:16 FL:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFs16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16ll_BFu16s, BFu16s_BFu16ll_BFs16ll_BFu16s)
//============================================================================


struct  BFu16s_BFu16ll_BFs16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed short v3:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16s) C1{ Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16s, BFu16s_BFu16ll_BFs16s)
//============================================================================


struct  BFu16s_BFu16ll_BFs16s_BFs16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16s_BFs16i) C1{ Fs:16 FL:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFs16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16s_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16s_BFs16i, BFu16s_BFu16ll_BFs16s_BFs16i)
//============================================================================


struct  BFu16s_BFu16ll_BFs16s_BFs16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16s_BFs16ll) C1{ Fs:16 FL:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16ll_BFs16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16s_BFs16ll, BFu16s_BFu16ll_BFs16s_BFs16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFs16s_BFs16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16s_BFs16s) C1{ Fs:16 FL:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFs16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16s_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16s_BFs16s, BFu16s_BFu16ll_BFs16s_BFs16s)
//============================================================================


struct  BFu16s_BFu16ll_BFs16s_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16s_BFu16i) C1{ Fs:16 FL:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFs16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16s_BFu16i, BFu16s_BFu16ll_BFs16s_BFu16i)
//============================================================================


struct  BFu16s_BFu16ll_BFs16s_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16s_BFu16ll) C1{ Fs:16 FL:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16ll_BFs16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16s_BFu16ll, BFu16s_BFu16ll_BFs16s_BFu16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFs16s_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  signed short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFs16s_BFu16s) C1{ Fs:16 FL:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFs16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFs16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFs16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFs16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFs16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFs16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFs16s_BFu16s, BFu16s_BFu16ll_BFs16s_BFu16s)
//============================================================================


struct  BFu16s_BFu16ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu16ll_BFu15i) C1{ Fs:16 FL:16 Fi:15}



static void Test_BFu16s_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu15i, BFu16s_BFu16ll_BFu15i)
//============================================================================


struct  BFu16s_BFu16ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu16ll_BFu15ll) C1{ Fs:16 FL:16 FL:15}



static void Test_BFu16s_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu15ll, BFu16s_BFu16ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu16ll_BFu15s) C1{ Fs:16 FL:16 Fs:15}



static void Test_BFu16s_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu15s, BFu16s_BFu16ll_BFu15s)
//============================================================================


struct  BFu16s_BFu16ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16i) C1{ Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16i, BFu16s_BFu16ll_BFu16i)
//============================================================================


struct  BFu16s_BFu16ll_BFu16i_BFs16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16i_BFs16i) C1{ Fs:16 FL:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFu16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16i_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16i_BFs16i, BFu16s_BFu16ll_BFu16i_BFs16i)
//============================================================================


struct  BFu16s_BFu16ll_BFu16i_BFs16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16i_BFs16ll) C1{ Fs:16 FL:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16ll_BFu16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16i_BFs16ll, BFu16s_BFu16ll_BFu16i_BFs16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu16i_BFs16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16i_BFs16s) C1{ Fs:16 FL:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFu16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16i_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16i_BFs16s, BFu16s_BFu16ll_BFu16i_BFs16s)
//============================================================================


struct  BFu16s_BFu16ll_BFu16i_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16i_BFu16i) C1{ Fs:16 FL:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16i_BFu16i, BFu16s_BFu16ll_BFu16i_BFu16i)
//============================================================================


struct  BFu16s_BFu16ll_BFu16i_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16i_BFu16ll) C1{ Fs:16 FL:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16ll_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16i_BFu16ll, BFu16s_BFu16ll_BFu16i_BFu16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu16i_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16i_BFu16s) C1{ Fs:16 FL:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16i_BFu16s, BFu16s_BFu16ll_BFu16i_BFu16s)
//============================================================================


struct  BFu16s_BFu16ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16ll) C1{ Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16ll, BFu16s_BFu16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu16ll_BFs16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16ll_BFs16i) C1{ Fs:16 FL:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFu16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16ll_BFs16i, BFu16s_BFu16ll_BFu16ll_BFs16i)
//============================================================================


struct  BFu16s_BFu16ll_BFu16ll_BFs16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16ll_BFs16ll) C1{ Fs:16 FL:16 FL:16 FL:16}



static void Test_BFu16s_BFu16ll_BFu16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16ll_BFs16ll, BFu16s_BFu16ll_BFu16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu16ll_BFs16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16ll_BFs16s) C1{ Fs:16 FL:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFu16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16ll_BFs16s, BFu16s_BFu16ll_BFu16ll_BFs16s)
//============================================================================


struct  BFu16s_BFu16ll_BFu16ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16ll_BFu16i) C1{ Fs:16 FL:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16ll_BFu16i, BFu16s_BFu16ll_BFu16ll_BFu16i)
//============================================================================


struct  BFu16s_BFu16ll_BFu16ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16ll_BFu16ll) C1{ Fs:16 FL:16 FL:16 FL:16}



static void Test_BFu16s_BFu16ll_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16ll_BFu16ll, BFu16s_BFu16ll_BFu16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu16ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16ll_BFu16s) C1{ Fs:16 FL:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16ll_BFu16s, BFu16s_BFu16ll_BFu16ll_BFu16s)
//============================================================================


struct  BFu16s_BFu16ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16s) C1{ Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16s, BFu16s_BFu16ll_BFu16s)
//============================================================================


struct  BFu16s_BFu16ll_BFu16s_BFs16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16s_BFs16i) C1{ Fs:16 FL:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFu16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16s_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16s_BFs16i, BFu16s_BFu16ll_BFu16s_BFs16i)
//============================================================================


struct  BFu16s_BFu16ll_BFu16s_BFs16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16s_BFs16ll) C1{ Fs:16 FL:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16ll_BFu16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16s_BFs16ll, BFu16s_BFu16ll_BFu16s_BFs16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu16s_BFs16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16s_BFs16s) C1{ Fs:16 FL:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFu16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16s_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16s_BFs16s, BFu16s_BFu16ll_BFu16s_BFs16s)
//============================================================================


struct  BFu16s_BFu16ll_BFu16s_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16s_BFu16i) C1{ Fs:16 FL:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16ll_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16s_BFu16i, BFu16s_BFu16ll_BFu16s_BFu16i)
//============================================================================


struct  BFu16s_BFu16ll_BFu16s_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16s_BFu16ll) C1{ Fs:16 FL:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16ll_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16s_BFu16ll, BFu16s_BFu16ll_BFu16s_BFu16ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu16s_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16ll_BFu16s_BFu16s) C1{ Fs:16 FL:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16ll_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu16s_BFu16s, BFu16s_BFu16ll_BFu16s_BFu16s)
//============================================================================


struct  BFu16s_BFu16ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu16ll_BFu17i) C1{ Fs:16 FL:16 Fi:17}



static void Test_BFu16s_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu17i, BFu16s_BFu16ll_BFu17i)
//============================================================================


struct  BFu16s_BFu16ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu16ll_BFu17ll) C1{ Fs:16 FL:16 FL:17}



static void Test_BFu16s_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu17ll, BFu16s_BFu16ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu16ll_BFu1c) C1{ Fs:16 FL:16 Fc:1}



static void Test_BFu16s_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu1c, BFu16s_BFu16ll_BFu1c)
//============================================================================


struct  BFu16s_BFu16ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu16ll_BFu1i) C1{ Fs:16 FL:16 Fi:1}



static void Test_BFu16s_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu1i, BFu16s_BFu16ll_BFu1i)
//============================================================================


struct  BFu16s_BFu16ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu16ll_BFu1ll) C1{ Fs:16 FL:16 FL:1}



static void Test_BFu16s_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu1ll, BFu16s_BFu16ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu16ll_BFu1s) C1{ Fs:16 FL:16 Fs:1}



static void Test_BFu16s_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu1s, BFu16s_BFu16ll_BFu1s)
//============================================================================


struct  BFu16s_BFu16ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu16ll_BFu31i) C1{ Fs:16 FL:16 Fi:31}



static void Test_BFu16s_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu31i, BFu16s_BFu16ll_BFu31i)
//============================================================================


struct  BFu16s_BFu16ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu16ll_BFu31ll) C1{ Fs:16 FL:16 FL:31}



static void Test_BFu16s_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu31ll, BFu16s_BFu16ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu16ll_BFu32i) C1{ Fs:16 FL:16 Fi:32}



static void Test_BFu16s_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu32i, BFu16s_BFu16ll_BFu32i)
//============================================================================


struct  BFu16s_BFu16ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu16ll_BFu32ll) C1{ Fs:16 FL:16 FL:32}



static void Test_BFu16s_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu32ll, BFu16s_BFu16ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu16ll_BFu33) C1{ Fs:16 FL:16 FL:33}



static void Test_BFu16s_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu16s_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu16s_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu33, BFu16s_BFu16ll_BFu33)
//============================================================================


struct  BFu16s_BFu16ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu16ll_BFu7c) C1{ Fs:16 FL:16 Fc:7}



static void Test_BFu16s_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu7c, BFu16s_BFu16ll_BFu7c)
//============================================================================


struct  BFu16s_BFu16ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu16ll_BFu7i) C1{ Fs:16 FL:16 Fi:7}



static void Test_BFu16s_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu7i, BFu16s_BFu16ll_BFu7i)
//============================================================================


struct  BFu16s_BFu16ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu16ll_BFu7ll) C1{ Fs:16 FL:16 FL:7}



static void Test_BFu16s_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu7ll, BFu16s_BFu16ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu16ll_BFu7s) C1{ Fs:16 FL:16 Fs:7}



static void Test_BFu16s_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu7s, BFu16s_BFu16ll_BFu7s)
//============================================================================


struct  BFu16s_BFu16ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu16ll_BFu8c) C1{ Fs:16 FL:16 Fc:8}



static void Test_BFu16s_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu8c, BFu16s_BFu16ll_BFu8c)
//============================================================================


struct  BFu16s_BFu16ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu16ll_BFu8i) C1{ Fs:16 FL:16 Fi:8}



static void Test_BFu16s_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu8i, BFu16s_BFu16ll_BFu8i)
//============================================================================


struct  BFu16s_BFu16ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu16ll_BFu8ll) C1{ Fs:16 FL:16 FL:8}



static void Test_BFu16s_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu8ll, BFu16s_BFu16ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu16ll_BFu8s) C1{ Fs:16 FL:16 Fs:8}



static void Test_BFu16s_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu8s, BFu16s_BFu16ll_BFu8s)
//============================================================================


struct  BFu16s_BFu16ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu16ll_BFu9i) C1{ Fs:16 FL:16 Fi:9}



static void Test_BFu16s_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu9i, BFu16s_BFu16ll_BFu9i)
//============================================================================


struct  BFu16s_BFu16ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu16ll_BFu9ll) C1{ Fs:16 FL:16 FL:9}



static void Test_BFu16s_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu9ll, BFu16s_BFu16ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu16ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu16ll_BFu9s) C1{ Fs:16 FL:16 Fs:9}



static void Test_BFu16s_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_BFu9s, BFu16s_BFu16ll_BFu9s)
//============================================================================


struct  BFu16s_BFu16ll_C  {
  unsigned short v1:16;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu16s_BFu16ll_C) C1{ Fs:16 FL:16 Fc}



static void Test_BFu16s_BFu16ll_C()
{
  {
    init_simple_test("BFu16s_BFu16ll_C");
    static STRUCT_IF_C BFu16s_BFu16ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_C, BFu16s_BFu16ll_C)
//============================================================================


struct  BFu16s_BFu16ll_D  {
  unsigned short v1:16;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu16s_BFu16ll_D) C1{ Fs:16 FL:16 FL}



static void Test_BFu16s_BFu16ll_D()
{
  {
    init_simple_test("BFu16s_BFu16ll_D");
    static STRUCT_IF_C BFu16s_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_D, BFu16s_BFu16ll_D)
//============================================================================


struct  BFu16s_BFu16ll_F  {
  unsigned short v1:16;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu16s_BFu16ll_F) C1{ Fs:16 FL:16 Fi}



static void Test_BFu16s_BFu16ll_F()
{
  {
    init_simple_test("BFu16s_BFu16ll_F");
    static STRUCT_IF_C BFu16s_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_F, BFu16s_BFu16ll_F)
//============================================================================


struct  BFu16s_BFu16ll_I  {
  unsigned short v1:16;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu16s_BFu16ll_I) C1{ Fs:16 FL:16 Fi}



static void Test_BFu16s_BFu16ll_I()
{
  {
    init_simple_test("BFu16s_BFu16ll_I");
    static STRUCT_IF_C BFu16s_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_I, BFu16s_BFu16ll_I)
//============================================================================


struct  BFu16s_BFu16ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu16s_BFu16ll_Ip) C1{ Fs:16 FL:16 Fp}



static void Test_BFu16s_BFu16ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu16ll_Ip");
    static STRUCT_IF_C BFu16s_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_Ip, BFu16s_BFu16ll_Ip)
//============================================================================


struct  BFu16s_BFu16ll_L  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu16ll_L) C1{ Fs:16 FL:16 FL}



static void Test_BFu16s_BFu16ll_L()
{
  {
    init_simple_test("BFu16s_BFu16ll_L");
    static STRUCT_IF_C BFu16s_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_L, BFu16s_BFu16ll_L)
//============================================================================


struct  BFu16s_BFu16ll_S  {
  unsigned short v1:16;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu16s_BFu16ll_S) C1{ Fs:16 FL:16 Fs}



static void Test_BFu16s_BFu16ll_S()
{
  {
    init_simple_test("BFu16s_BFu16ll_S");
    static STRUCT_IF_C BFu16s_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_S, BFu16s_BFu16ll_S)
//============================================================================


struct  BFu16s_BFu16ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu16ll_Uc) C1{ Fs:16 FL:16 Fc}



static void Test_BFu16s_BFu16ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu16ll_Uc");
    static STRUCT_IF_C BFu16s_BFu16ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_Uc, BFu16s_BFu16ll_Uc)
//============================================================================


struct  BFu16s_BFu16ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu16ll_Ui) C1{ Fs:16 FL:16 Fi}



static void Test_BFu16s_BFu16ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu16ll_Ui");
    static STRUCT_IF_C BFu16s_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_Ui, BFu16s_BFu16ll_Ui)
//============================================================================


struct  BFu16s_BFu16ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu16ll_Ul) C1{ Fs:16 FL:16 FL}



static void Test_BFu16s_BFu16ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu16ll_Ul");
    static STRUCT_IF_C BFu16s_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_Ul, BFu16s_BFu16ll_Ul)
//============================================================================


struct  BFu16s_BFu16ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu16ll_Us) C1{ Fs:16 FL:16 Fs}



static void Test_BFu16s_BFu16ll_Us()
{
  {
    init_simple_test("BFu16s_BFu16ll_Us");
    static STRUCT_IF_C BFu16s_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_Us, BFu16s_BFu16ll_Us)
//============================================================================


struct  BFu16s_BFu16ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu16s_BFu16ll_Vp) C1{ Fs:16 FL:16 Fp}



static void Test_BFu16s_BFu16ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu16ll_Vp");
    static STRUCT_IF_C BFu16s_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16ll_Vp, BFu16s_BFu16ll_Vp)
//============================================================================


struct  BFu16s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:16;
};
//SIG(1 BFu16s_BFu16s) C1{ Fs:16 Fs:16}



static void Test_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s, BFu16s_BFu16s)
//============================================================================


struct  BFu16s_BFu16s_BFs16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed int v3:16;
};
//SIG(1 BFu16s_BFu16s_BFs16i) C1{ Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16i, BFu16s_BFu16s_BFs16i)
//============================================================================


struct  BFu16s_BFu16s_BFs16i_BFs16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16i_BFs16i) C1{ Fs:16 Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16s_BFs16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFs16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16i_BFs16i, BFu16s_BFu16s_BFs16i_BFs16i)
//============================================================================


struct  BFu16s_BFu16s_BFs16i_BFs16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16i_BFs16ll) C1{ Fs:16 Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16s_BFs16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16i_BFs16ll, BFu16s_BFu16s_BFs16i_BFs16ll)
//============================================================================


struct  BFu16s_BFu16s_BFs16i_BFs16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16i_BFs16s) C1{ Fs:16 Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16s_BFs16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFs16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16i_BFs16s, BFu16s_BFu16s_BFs16i_BFs16s)
//============================================================================


struct  BFu16s_BFu16s_BFs16i_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16i_BFu16i) C1{ Fs:16 Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16s_BFs16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFs16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16i_BFu16i, BFu16s_BFu16s_BFs16i_BFu16i)
//============================================================================


struct  BFu16s_BFu16s_BFs16i_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16i_BFu16ll) C1{ Fs:16 Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16s_BFs16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16i_BFu16ll, BFu16s_BFu16s_BFs16i_BFu16ll)
//============================================================================


struct  BFu16s_BFu16s_BFs16i_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16i_BFu16s) C1{ Fs:16 Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16s_BFs16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFs16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16i_BFu16s, BFu16s_BFu16s_BFs16i_BFu16s)
//============================================================================


struct  BFu16s_BFu16s_BFs16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed __tsi64 v3:16;
};
//SIG(1 BFu16s_BFu16s_BFs16ll) C1{ Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16ll, BFu16s_BFu16s_BFs16ll)
//============================================================================


struct  BFu16s_BFu16s_BFs16ll_BFs16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed __tsi64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16ll_BFs16i) C1{ Fs:16 Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16s_BFs16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16ll_BFs16i, BFu16s_BFu16s_BFs16ll_BFs16i)
//============================================================================


struct  BFu16s_BFu16s_BFs16ll_BFs16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed __tsi64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16ll_BFs16ll) C1{ Fs:16 Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFu16s_BFs16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16ll_BFs16ll, BFu16s_BFu16s_BFs16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFu16s_BFs16ll_BFs16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed __tsi64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16ll_BFs16s) C1{ Fs:16 Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16s_BFs16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16ll_BFs16s, BFu16s_BFu16s_BFs16ll_BFs16s)
//============================================================================


struct  BFu16s_BFu16s_BFs16ll_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed __tsi64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16ll_BFu16i) C1{ Fs:16 Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16s_BFs16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16ll_BFu16i, BFu16s_BFu16s_BFs16ll_BFu16i)
//============================================================================


struct  BFu16s_BFu16s_BFs16ll_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed __tsi64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16ll_BFu16ll) C1{ Fs:16 Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFu16s_BFs16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16ll_BFu16ll, BFu16s_BFu16s_BFs16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu16s_BFs16ll_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed __tsi64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16ll_BFu16s) C1{ Fs:16 Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16s_BFs16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16ll_BFu16s, BFu16s_BFu16s_BFs16ll_BFu16s)
//============================================================================


struct  BFu16s_BFu16s_BFs16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed short v3:16;
};
//SIG(1 BFu16s_BFu16s_BFs16s) C1{ Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFs16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16s, BFu16s_BFu16s_BFs16s)
//============================================================================


struct  BFu16s_BFu16s_BFs16s_BFs16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16s_BFs16i) C1{ Fs:16 Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16s_BFs16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFs16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16s_BFs16i, BFu16s_BFu16s_BFs16s_BFs16i)
//============================================================================


struct  BFu16s_BFu16s_BFs16s_BFs16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16s_BFs16ll) C1{ Fs:16 Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16s_BFs16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16s_BFs16ll, BFu16s_BFu16s_BFs16s_BFs16ll)
//============================================================================


struct  BFu16s_BFu16s_BFs16s_BFs16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16s_BFs16s) C1{ Fs:16 Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16s_BFs16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16s_BFs16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFs16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16s_BFs16s, BFu16s_BFu16s_BFs16s_BFs16s)
//============================================================================


struct  BFu16s_BFu16s_BFs16s_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16s_BFu16i) C1{ Fs:16 Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16s_BFs16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFs16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16s_BFu16i, BFu16s_BFu16s_BFs16s_BFu16i)
//============================================================================


struct  BFu16s_BFu16s_BFs16s_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16s_BFu16ll) C1{ Fs:16 Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16s_BFs16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFs16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16s_BFu16ll, BFu16s_BFu16s_BFs16s_BFu16ll)
//============================================================================


struct  BFu16s_BFu16s_BFs16s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  signed short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFs16s_BFu16s) C1{ Fs:16 Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16s_BFs16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFs16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFs16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFs16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFs16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFs16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFs16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFs16s_BFu16s, BFu16s_BFu16s_BFs16s_BFu16s)
//============================================================================


struct  BFu16s_BFu16s_BFu15i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu16s_BFu15i) C1{ Fs:16 Fs:16 Fi:15}



static void Test_BFu16s_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu15i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu15i, BFu16s_BFu16s_BFu15i)
//============================================================================


struct  BFu16s_BFu16s_BFu15ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu16s_BFu15ll) C1{ Fs:16 Fs:16 FL:15}



static void Test_BFu16s_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu15ll, BFu16s_BFu16s_BFu15ll)
//============================================================================


struct  BFu16s_BFu16s_BFu15s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu16s_BFu15s) C1{ Fs:16 Fs:16 Fs:15}



static void Test_BFu16s_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu15s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu15s, BFu16s_BFu16s_BFu15s)
//============================================================================


struct  BFu16s_BFu16s_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu16s_BFu16i) C1{ Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16i, BFu16s_BFu16s_BFu16i)
//============================================================================


struct  BFu16s_BFu16s_BFu16i_BFs16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16i_BFs16i) C1{ Fs:16 Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16s_BFu16i_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16i_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16i_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16i_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu16i_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16i_BFs16i, BFu16s_BFu16s_BFu16i_BFs16i)
//============================================================================


struct  BFu16s_BFu16s_BFu16i_BFs16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16i_BFs16ll) C1{ Fs:16 Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16s_BFu16i_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16i_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16i_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16i_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16i_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16i_BFs16ll, BFu16s_BFu16s_BFu16i_BFs16ll)
//============================================================================


struct  BFu16s_BFu16s_BFu16i_BFs16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16i_BFs16s) C1{ Fs:16 Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16s_BFu16i_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16i_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16i_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16i_BFs16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu16i_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16i_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16i_BFs16s, BFu16s_BFu16s_BFu16i_BFs16s)
//============================================================================


struct  BFu16s_BFu16s_BFu16i_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16i_BFu16i) C1{ Fs:16 Fs:16 Fi:16 Fi:16}



static void Test_BFu16s_BFu16s_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16i_BFu16i, BFu16s_BFu16s_BFu16i_BFu16i)
//============================================================================


struct  BFu16s_BFu16s_BFu16i_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16i_BFu16ll) C1{ Fs:16 Fs:16 Fi:16 FL:16}



static void Test_BFu16s_BFu16s_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16i_BFu16ll, BFu16s_BFu16s_BFu16i_BFu16ll)
//============================================================================


struct  BFu16s_BFu16s_BFu16i_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16i_BFu16s) C1{ Fs:16 Fs:16 Fi:16 Fs:16}



static void Test_BFu16s_BFu16s_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16i_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16i_BFu16s, BFu16s_BFu16s_BFu16i_BFu16s)
//============================================================================


struct  BFu16s_BFu16s_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu16s_BFu16ll) C1{ Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16ll, BFu16s_BFu16s_BFu16ll)
//============================================================================


struct  BFu16s_BFu16s_BFu16ll_BFs16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16ll_BFs16i) C1{ Fs:16 Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16s_BFu16ll_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16ll_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16ll_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16ll_BFs16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16ll_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16ll_BFs16i, BFu16s_BFu16s_BFu16ll_BFs16i)
//============================================================================


struct  BFu16s_BFu16s_BFu16ll_BFs16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16ll_BFs16ll) C1{ Fs:16 Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFu16s_BFu16ll_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16ll_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16ll_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16ll_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16ll_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16ll_BFs16ll, BFu16s_BFu16s_BFu16ll_BFs16ll)
//============================================================================


struct  BFu16s_BFu16s_BFu16ll_BFs16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16ll_BFs16s) C1{ Fs:16 Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16s_BFu16ll_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16ll_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16ll_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16ll_BFs16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16ll_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16ll_BFs16s, BFu16s_BFu16s_BFu16ll_BFs16s)
//============================================================================


struct  BFu16s_BFu16s_BFu16ll_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16ll_BFu16i) C1{ Fs:16 Fs:16 FL:16 Fi:16}



static void Test_BFu16s_BFu16s_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16ll_BFu16i, BFu16s_BFu16s_BFu16ll_BFu16i)
//============================================================================


struct  BFu16s_BFu16s_BFu16ll_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16ll_BFu16ll) C1{ Fs:16 Fs:16 FL:16 FL:16}



static void Test_BFu16s_BFu16s_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16ll_BFu16ll, BFu16s_BFu16s_BFu16ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu16s_BFu16ll_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16ll_BFu16s) C1{ Fs:16 Fs:16 FL:16 Fs:16}



static void Test_BFu16s_BFu16s_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16ll_BFu16s, BFu16s_BFu16s_BFu16ll_BFu16s)
//============================================================================


struct  BFu16s_BFu16s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu16s_BFu16s) C1{ Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16s, BFu16s_BFu16s_BFu16s)
//============================================================================


struct  BFu16s_BFu16s_BFu16s_BFs16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:16;
  signed int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16s_BFs16i) C1{ Fs:16 Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16s_BFu16s_BFs16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16s_BFs16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16s_BFs16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16s_BFs16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu16s_BFs16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16s_BFs16i, BFu16s_BFu16s_BFu16s_BFs16i)
//============================================================================


struct  BFu16s_BFu16s_BFu16s_BFs16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:16;
  signed __tsi64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16s_BFs16ll) C1{ Fs:16 Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16s_BFu16s_BFs16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16s_BFs16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16s_BFs16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16s_BFs16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16s_BFs16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16s_BFs16ll, BFu16s_BFu16s_BFu16s_BFs16ll)
//============================================================================


struct  BFu16s_BFu16s_BFu16s_BFs16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:16;
  signed short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16s_BFs16s) C1{ Fs:16 Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16s_BFu16s_BFs16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16s_BFs16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16s_BFs16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16s_BFs16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu16s_BFs16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFs16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_sll(1LL<<15), "BFu16s_BFu16s_BFu16s_BFs16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16s_BFs16s, BFu16s_BFu16s_BFu16s_BFs16s)
//============================================================================


struct  BFu16s_BFu16s_BFu16s_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:16;
  unsigned int v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16s_BFu16i) C1{ Fs:16 Fs:16 Fs:16 Fi:16}



static void Test_BFu16s_BFu16s_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16i");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16s_BFu16i, BFu16s_BFu16s_BFu16s_BFu16i)
//============================================================================


struct  BFu16s_BFu16s_BFu16s_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:16;
  __tsu64 v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16s_BFu16ll) C1{ Fs:16 Fs:16 Fs:16 FL:16}



static void Test_BFu16s_BFu16s_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16s_BFu16ll, BFu16s_BFu16s_BFu16s_BFu16ll)
//============================================================================


struct  BFu16s_BFu16s_BFu16s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:16;
  unsigned short v4:16;
};
//SIG(1 BFu16s_BFu16s_BFu16s_BFu16s) C1{ Fs:16 Fs:16 Fs:16 Fs:16}



static void Test_BFu16s_BFu16s_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu16s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, 1, "BFu16s_BFu16s_BFu16s_BFu16s");
    set_bf_and_test(lv, v4, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu16s_BFu16s, BFu16s_BFu16s_BFu16s_BFu16s)
//============================================================================


struct  BFu16s_BFu16s_BFu17i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu16s_BFu17i) C1{ Fs:16 Fs:16 Fi:17}



static void Test_BFu16s_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu17i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu17i, BFu16s_BFu16s_BFu17i)
//============================================================================


struct  BFu16s_BFu16s_BFu17ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu16s_BFu17ll) C1{ Fs:16 Fs:16 FL:17}



static void Test_BFu16s_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu17ll, BFu16s_BFu16s_BFu17ll)
//============================================================================


struct  BFu16s_BFu16s_BFu1c  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu16s_BFu1c) C1{ Fs:16 Fs:16 Fc:1}



static void Test_BFu16s_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu1c");
    static STRUCT_IF_C BFu16s_BFu16s_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu1c, BFu16s_BFu16s_BFu1c)
//============================================================================


struct  BFu16s_BFu16s_BFu1i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu16s_BFu1i) C1{ Fs:16 Fs:16 Fi:1}



static void Test_BFu16s_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu1i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu1i, BFu16s_BFu16s_BFu1i)
//============================================================================


struct  BFu16s_BFu16s_BFu1ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu16s_BFu1ll) C1{ Fs:16 Fs:16 FL:1}



static void Test_BFu16s_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu1ll, BFu16s_BFu16s_BFu1ll)
//============================================================================


struct  BFu16s_BFu16s_BFu1s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu16s_BFu1s) C1{ Fs:16 Fs:16 Fs:1}



static void Test_BFu16s_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu1s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu1s, BFu16s_BFu16s_BFu1s)
//============================================================================


struct  BFu16s_BFu16s_BFu31i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu16s_BFu31i) C1{ Fs:16 Fs:16 Fi:31}



static void Test_BFu16s_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu31i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu31i, BFu16s_BFu16s_BFu31i)
//============================================================================


struct  BFu16s_BFu16s_BFu31ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu16s_BFu31ll) C1{ Fs:16 Fs:16 FL:31}



static void Test_BFu16s_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu31ll, BFu16s_BFu16s_BFu31ll)
//============================================================================


struct  BFu16s_BFu16s_BFu32i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu16s_BFu32i) C1{ Fs:16 Fs:16 Fi:32}



static void Test_BFu16s_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu32i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu32i, BFu16s_BFu16s_BFu32i)
//============================================================================


struct  BFu16s_BFu16s_BFu32ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu16s_BFu32ll) C1{ Fs:16 Fs:16 FL:32}



static void Test_BFu16s_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu32ll, BFu16s_BFu16s_BFu32ll)
//============================================================================


struct  BFu16s_BFu16s_BFu33  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu16s_BFu33) C1{ Fs:16 Fs:16 FL:33}



static void Test_BFu16s_BFu16s_BFu33()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu33");
    static STRUCT_IF_C BFu16s_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu16s_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu16s_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu33, BFu16s_BFu16s_BFu33)
//============================================================================


struct  BFu16s_BFu16s_BFu7c  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu16s_BFu7c) C1{ Fs:16 Fs:16 Fc:7}



static void Test_BFu16s_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu7c");
    static STRUCT_IF_C BFu16s_BFu16s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu7c, BFu16s_BFu16s_BFu7c)
//============================================================================


struct  BFu16s_BFu16s_BFu7i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu16s_BFu7i) C1{ Fs:16 Fs:16 Fi:7}



static void Test_BFu16s_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu7i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu7i, BFu16s_BFu16s_BFu7i)
//============================================================================


struct  BFu16s_BFu16s_BFu7ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu16s_BFu7ll) C1{ Fs:16 Fs:16 FL:7}



static void Test_BFu16s_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu7ll, BFu16s_BFu16s_BFu7ll)
//============================================================================


struct  BFu16s_BFu16s_BFu7s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu16s_BFu7s) C1{ Fs:16 Fs:16 Fs:7}



static void Test_BFu16s_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu7s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu7s, BFu16s_BFu16s_BFu7s)
//============================================================================


struct  BFu16s_BFu16s_BFu8c  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu16s_BFu8c) C1{ Fs:16 Fs:16 Fc:8}



static void Test_BFu16s_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu8c");
    static STRUCT_IF_C BFu16s_BFu16s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu8c, BFu16s_BFu16s_BFu8c)
//============================================================================


struct  BFu16s_BFu16s_BFu8i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu16s_BFu8i) C1{ Fs:16 Fs:16 Fi:8}



static void Test_BFu16s_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu8i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu8i, BFu16s_BFu16s_BFu8i)
//============================================================================


struct  BFu16s_BFu16s_BFu8ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu16s_BFu8ll) C1{ Fs:16 Fs:16 FL:8}



static void Test_BFu16s_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu8ll, BFu16s_BFu16s_BFu8ll)
//============================================================================


struct  BFu16s_BFu16s_BFu8s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu16s_BFu8s) C1{ Fs:16 Fs:16 Fs:8}



static void Test_BFu16s_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu8s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu8s, BFu16s_BFu16s_BFu8s)
//============================================================================


struct  BFu16s_BFu16s_BFu9i  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu16s_BFu9i) C1{ Fs:16 Fs:16 Fi:9}



static void Test_BFu16s_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu9i");
    static STRUCT_IF_C BFu16s_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu9i, BFu16s_BFu16s_BFu9i)
//============================================================================


struct  BFu16s_BFu16s_BFu9ll  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu16s_BFu9ll) C1{ Fs:16 Fs:16 FL:9}



static void Test_BFu16s_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu9ll, BFu16s_BFu16s_BFu9ll)
//============================================================================


struct  BFu16s_BFu16s_BFu9s  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu16s_BFu9s) C1{ Fs:16 Fs:16 Fs:9}



static void Test_BFu16s_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu16s_BFu9s");
    static STRUCT_IF_C BFu16s_BFu16s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_BFu9s, BFu16s_BFu16s_BFu9s)
//============================================================================


struct  BFu16s_BFu16s_C  {
  unsigned short v1:16;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu16s_BFu16s_C) C1{ Fs:16 Fs:16 Fc}



static void Test_BFu16s_BFu16s_C()
{
  {
    init_simple_test("BFu16s_BFu16s_C");
    static STRUCT_IF_C BFu16s_BFu16s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_C, BFu16s_BFu16s_C)
//============================================================================


struct  BFu16s_BFu16s_D  {
  unsigned short v1:16;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu16s_BFu16s_D) C1{ Fs:16 Fs:16 FL}



static void Test_BFu16s_BFu16s_D()
{
  {
    init_simple_test("BFu16s_BFu16s_D");
    static STRUCT_IF_C BFu16s_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_D, BFu16s_BFu16s_D)
//============================================================================


struct  BFu16s_BFu16s_F  {
  unsigned short v1:16;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu16s_BFu16s_F) C1{ Fs:16 Fs:16 Fi}



static void Test_BFu16s_BFu16s_F()
{
  {
    init_simple_test("BFu16s_BFu16s_F");
    static STRUCT_IF_C BFu16s_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_F, BFu16s_BFu16s_F)
//============================================================================


struct  BFu16s_BFu16s_I  {
  unsigned short v1:16;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu16s_BFu16s_I) C1{ Fs:16 Fs:16 Fi}



static void Test_BFu16s_BFu16s_I()
{
  {
    init_simple_test("BFu16s_BFu16s_I");
    static STRUCT_IF_C BFu16s_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_I, BFu16s_BFu16s_I)
//============================================================================


struct  BFu16s_BFu16s_Ip  {
  unsigned short v1:16;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu16s_BFu16s_Ip) C1{ Fs:16 Fs:16 Fp}



static void Test_BFu16s_BFu16s_Ip()
{
  {
    init_simple_test("BFu16s_BFu16s_Ip");
    static STRUCT_IF_C BFu16s_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_Ip, BFu16s_BFu16s_Ip)
//============================================================================


struct  BFu16s_BFu16s_L  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu16s_L) C1{ Fs:16 Fs:16 FL}



static void Test_BFu16s_BFu16s_L()
{
  {
    init_simple_test("BFu16s_BFu16s_L");
    static STRUCT_IF_C BFu16s_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_L, BFu16s_BFu16s_L)
//============================================================================


struct  BFu16s_BFu16s_S  {
  unsigned short v1:16;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu16s_BFu16s_S) C1{ Fs:16 Fs:16 Fs}



static void Test_BFu16s_BFu16s_S()
{
  {
    init_simple_test("BFu16s_BFu16s_S");
    static STRUCT_IF_C BFu16s_BFu16s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_S, BFu16s_BFu16s_S)
//============================================================================


struct  BFu16s_BFu16s_Uc  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu16s_Uc) C1{ Fs:16 Fs:16 Fc}



static void Test_BFu16s_BFu16s_Uc()
{
  {
    init_simple_test("BFu16s_BFu16s_Uc");
    static STRUCT_IF_C BFu16s_BFu16s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_Uc, BFu16s_BFu16s_Uc)
//============================================================================


struct  BFu16s_BFu16s_Ui  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu16s_Ui) C1{ Fs:16 Fs:16 Fi}



static void Test_BFu16s_BFu16s_Ui()
{
  {
    init_simple_test("BFu16s_BFu16s_Ui");
    static STRUCT_IF_C BFu16s_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_Ui, BFu16s_BFu16s_Ui)
//============================================================================


struct  BFu16s_BFu16s_Ul  {
  unsigned short v1:16;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu16s_Ul) C1{ Fs:16 Fs:16 FL}



static void Test_BFu16s_BFu16s_Ul()
{
  {
    init_simple_test("BFu16s_BFu16s_Ul");
    static STRUCT_IF_C BFu16s_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_Ul, BFu16s_BFu16s_Ul)
//============================================================================


struct  BFu16s_BFu16s_Us  {
  unsigned short v1:16;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu16s_Us) C1{ Fs:16 Fs:16 Fs}



static void Test_BFu16s_BFu16s_Us()
{
  {
    init_simple_test("BFu16s_BFu16s_Us");
    static STRUCT_IF_C BFu16s_BFu16s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_Us, BFu16s_BFu16s_Us)
//============================================================================


struct  BFu16s_BFu16s_Vp  {
  unsigned short v1:16;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu16s_BFu16s_Vp) C1{ Fs:16 Fs:16 Fp}



static void Test_BFu16s_BFu16s_Vp()
{
  {
    init_simple_test("BFu16s_BFu16s_Vp");
    static STRUCT_IF_C BFu16s_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu16s_Vp, BFu16s_BFu16s_Vp)
//============================================================================


struct  BFu16s_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu16s_BFu17i) C1{ Fs:16 Fi:17}



static void Test_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu17i");
    static STRUCT_IF_C BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i, BFu16s_BFu17i)
//============================================================================


struct  BFu16s_BFu17i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu17i_BFu15i) C1{ Fs:16 Fi:17 Fi:15}



static void Test_BFu16s_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu16s_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu15i, BFu16s_BFu17i_BFu15i)
//============================================================================


struct  BFu16s_BFu17i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu17i_BFu15ll) C1{ Fs:16 Fi:17 FL:15}



static void Test_BFu16s_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu16s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu15ll, BFu16s_BFu17i_BFu15ll)
//============================================================================


struct  BFu16s_BFu17i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu17i_BFu15s) C1{ Fs:16 Fi:17 Fs:15}



static void Test_BFu16s_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu16s_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu15s, BFu16s_BFu17i_BFu15s)
//============================================================================


struct  BFu16s_BFu17i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu17i_BFu16i) C1{ Fs:16 Fi:17 Fi:16}



static void Test_BFu16s_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu16i, BFu16s_BFu17i_BFu16i)
//============================================================================


struct  BFu16s_BFu17i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu17i_BFu16ll) C1{ Fs:16 Fi:17 FL:16}



static void Test_BFu16s_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, 1, "BFu16s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu16ll, BFu16s_BFu17i_BFu16ll)
//============================================================================


struct  BFu16s_BFu17i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu17i_BFu16s) C1{ Fs:16 Fi:17 Fs:16}



static void Test_BFu16s_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu17i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu16s, BFu16s_BFu17i_BFu16s)
//============================================================================


struct  BFu16s_BFu17i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu17i_BFu17i) C1{ Fs:16 Fi:17 Fi:17}



static void Test_BFu16s_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu17i, BFu16s_BFu17i_BFu17i)
//============================================================================


struct  BFu16s_BFu17i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu17i_BFu17ll) C1{ Fs:16 Fi:17 FL:17}



static void Test_BFu16s_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu16s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu17ll, BFu16s_BFu17i_BFu17ll)
//============================================================================


struct  BFu16s_BFu17i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu17i_BFu1c) C1{ Fs:16 Fi:17 Fc:1}



static void Test_BFu16s_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu17i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu16s_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu1c, BFu16s_BFu17i_BFu1c)
//============================================================================


struct  BFu16s_BFu17i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu17i_BFu1i) C1{ Fs:16 Fi:17 Fi:1}



static void Test_BFu16s_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu16s_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu1i, BFu16s_BFu17i_BFu1i)
//============================================================================


struct  BFu16s_BFu17i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu17i_BFu1ll) C1{ Fs:16 Fi:17 FL:1}



static void Test_BFu16s_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu16s_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu1ll, BFu16s_BFu17i_BFu1ll)
//============================================================================


struct  BFu16s_BFu17i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu17i_BFu1s) C1{ Fs:16 Fi:17 Fs:1}



static void Test_BFu16s_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu17i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu16s_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu1s, BFu16s_BFu17i_BFu1s)
//============================================================================


struct  BFu16s_BFu17i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu17i_BFu31i) C1{ Fs:16 Fi:17 Fi:31}



static void Test_BFu16s_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu31i, BFu16s_BFu17i_BFu31i)
//============================================================================


struct  BFu16s_BFu17i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu17i_BFu31ll) C1{ Fs:16 Fi:17 FL:31}



static void Test_BFu16s_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu16s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu16s_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu31ll, BFu16s_BFu17i_BFu31ll)
//============================================================================


struct  BFu16s_BFu17i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu17i_BFu32i) C1{ Fs:16 Fi:17 Fi:32}



static void Test_BFu16s_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu32i, BFu16s_BFu17i_BFu32i)
//============================================================================


struct  BFu16s_BFu17i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu17i_BFu32ll) C1{ Fs:16 Fi:17 FL:32}



static void Test_BFu16s_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu16s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu16s_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu32ll, BFu16s_BFu17i_BFu32ll)
//============================================================================


struct  BFu16s_BFu17i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu17i_BFu33) C1{ Fs:16 Fi:17 FL:33}



static void Test_BFu16s_BFu17i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu33");
    static STRUCT_IF_C BFu16s_BFu17i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, 1, "BFu16s_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu16s_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu33, BFu16s_BFu17i_BFu33)
//============================================================================


struct  BFu16s_BFu17i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu17i_BFu7c) C1{ Fs:16 Fi:17 Fc:7}



static void Test_BFu16s_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu17i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu16s_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu7c, BFu16s_BFu17i_BFu7c)
//============================================================================


struct  BFu16s_BFu17i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu17i_BFu7i) C1{ Fs:16 Fi:17 Fi:7}



static void Test_BFu16s_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu16s_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu7i, BFu16s_BFu17i_BFu7i)
//============================================================================


struct  BFu16s_BFu17i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu17i_BFu7ll) C1{ Fs:16 Fi:17 FL:7}



static void Test_BFu16s_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu16s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu7ll, BFu16s_BFu17i_BFu7ll)
//============================================================================


struct  BFu16s_BFu17i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu17i_BFu7s) C1{ Fs:16 Fi:17 Fs:7}



static void Test_BFu16s_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu17i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu16s_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu7s, BFu16s_BFu17i_BFu7s)
//============================================================================


struct  BFu16s_BFu17i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu17i_BFu8c) C1{ Fs:16 Fi:17 Fc:8}



static void Test_BFu16s_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu16s_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu8c, BFu16s_BFu17i_BFu8c)
//============================================================================


struct  BFu16s_BFu17i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu17i_BFu8i) C1{ Fs:16 Fi:17 Fi:8}



static void Test_BFu16s_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu16s_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu8i, BFu16s_BFu17i_BFu8i)
//============================================================================


struct  BFu16s_BFu17i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu17i_BFu8ll) C1{ Fs:16 Fi:17 FL:8}



static void Test_BFu16s_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu16s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu8ll, BFu16s_BFu17i_BFu8ll)
//============================================================================


struct  BFu16s_BFu17i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu17i_BFu8s) C1{ Fs:16 Fi:17 Fs:8}



static void Test_BFu16s_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu16s_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu8s, BFu16s_BFu17i_BFu8s)
//============================================================================


struct  BFu16s_BFu17i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu17i_BFu9i) C1{ Fs:16 Fi:17 Fi:9}



static void Test_BFu16s_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu16s_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu9i, BFu16s_BFu17i_BFu9i)
//============================================================================


struct  BFu16s_BFu17i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu17i_BFu9ll) C1{ Fs:16 Fi:17 FL:9}



static void Test_BFu16s_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu16s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu9ll, BFu16s_BFu17i_BFu9ll)
//============================================================================


struct  BFu16s_BFu17i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu17i_BFu9s) C1{ Fs:16 Fi:17 Fs:9}



static void Test_BFu16s_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu17i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu16s_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_BFu9s, BFu16s_BFu17i_BFu9s)
//============================================================================


struct  BFu16s_BFu17i_C  {
  unsigned short v1:16;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu16s_BFu17i_C) C1{ Fs:16 Fi:17 Fc}



static void Test_BFu16s_BFu17i_C()
{
  {
    init_simple_test("BFu16s_BFu17i_C");
    static STRUCT_IF_C BFu16s_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_C");
    check_field_offset(lv, v3, 7, "BFu16s_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_C, BFu16s_BFu17i_C)
//============================================================================


struct  BFu16s_BFu17i_D  {
  unsigned short v1:16;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu16s_BFu17i_D) C1{ Fs:16 Fi:17 FL}



static void Test_BFu16s_BFu17i_D()
{
  {
    init_simple_test("BFu16s_BFu17i_D");
    static STRUCT_IF_C BFu16s_BFu17i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_D");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_D, BFu16s_BFu17i_D)
//============================================================================


struct  BFu16s_BFu17i_F  {
  unsigned short v1:16;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu16s_BFu17i_F) C1{ Fs:16 Fi:17 Fi}



static void Test_BFu16s_BFu17i_F()
{
  {
    init_simple_test("BFu16s_BFu17i_F");
    static STRUCT_IF_C BFu16s_BFu17i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_F");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_F, BFu16s_BFu17i_F)
//============================================================================


struct  BFu16s_BFu17i_I  {
  unsigned short v1:16;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu16s_BFu17i_I) C1{ Fs:16 Fi:17 Fi}



static void Test_BFu16s_BFu17i_I()
{
  {
    init_simple_test("BFu16s_BFu17i_I");
    static STRUCT_IF_C BFu16s_BFu17i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_I");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_I, BFu16s_BFu17i_I)
//============================================================================


struct  BFu16s_BFu17i_Ip  {
  unsigned short v1:16;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu16s_BFu17i_Ip) C1{ Fs:16 Fi:17 Fp}



static void Test_BFu16s_BFu17i_Ip()
{
  {
    init_simple_test("BFu16s_BFu17i_Ip");
    static STRUCT_IF_C BFu16s_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_Ip");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_Ip, BFu16s_BFu17i_Ip)
//============================================================================


struct  BFu16s_BFu17i_L  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu17i_L) C1{ Fs:16 Fi:17 FL}



static void Test_BFu16s_BFu17i_L()
{
  {
    init_simple_test("BFu16s_BFu17i_L");
    static STRUCT_IF_C BFu16s_BFu17i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_L");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_L, BFu16s_BFu17i_L)
//============================================================================


struct  BFu16s_BFu17i_S  {
  unsigned short v1:16;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu16s_BFu17i_S) C1{ Fs:16 Fi:17 Fs}



static void Test_BFu16s_BFu17i_S()
{
  {
    init_simple_test("BFu16s_BFu17i_S");
    static STRUCT_IF_C BFu16s_BFu17i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_S");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_S, BFu16s_BFu17i_S)
//============================================================================


struct  BFu16s_BFu17i_Uc  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu17i_Uc) C1{ Fs:16 Fi:17 Fc}



static void Test_BFu16s_BFu17i_Uc()
{
  {
    init_simple_test("BFu16s_BFu17i_Uc");
    static STRUCT_IF_C BFu16s_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_Uc");
    check_field_offset(lv, v3, 7, "BFu16s_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_Uc, BFu16s_BFu17i_Uc)
//============================================================================


struct  BFu16s_BFu17i_Ui  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu17i_Ui) C1{ Fs:16 Fi:17 Fi}



static void Test_BFu16s_BFu17i_Ui()
{
  {
    init_simple_test("BFu16s_BFu17i_Ui");
    static STRUCT_IF_C BFu16s_BFu17i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_Ui");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_Ui, BFu16s_BFu17i_Ui)
//============================================================================


struct  BFu16s_BFu17i_Ul  {
  unsigned short v1:16;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu17i_Ul) C1{ Fs:16 Fi:17 FL}



static void Test_BFu16s_BFu17i_Ul()
{
  {
    init_simple_test("BFu16s_BFu17i_Ul");
    static STRUCT_IF_C BFu16s_BFu17i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_Ul");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_Ul, BFu16s_BFu17i_Ul)
//============================================================================


struct  BFu16s_BFu17i_Us  {
  unsigned short v1:16;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu17i_Us) C1{ Fs:16 Fi:17 Fs}



static void Test_BFu16s_BFu17i_Us()
{
  {
    init_simple_test("BFu16s_BFu17i_Us");
    static STRUCT_IF_C BFu16s_BFu17i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_Us");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_Us, BFu16s_BFu17i_Us)
//============================================================================


struct  BFu16s_BFu17i_Vp  {
  unsigned short v1:16;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu16s_BFu17i_Vp) C1{ Fs:16 Fi:17 Fp}



static void Test_BFu16s_BFu17i_Vp()
{
  {
    init_simple_test("BFu16s_BFu17i_Vp");
    static STRUCT_IF_C BFu16s_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_Vp");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17i_Vp, BFu16s_BFu17i_Vp)
//============================================================================


struct  BFu16s_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu16s_BFu17ll) C1{ Fs:16 FL:17}



static void Test_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll, BFu16s_BFu17ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu17ll_BFu15i) C1{ Fs:16 FL:17 Fi:15}



static void Test_BFu16s_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu16s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu15i, BFu16s_BFu17ll_BFu15i)
//============================================================================


struct  BFu16s_BFu17ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu17ll_BFu15ll) C1{ Fs:16 FL:17 FL:15}



static void Test_BFu16s_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu16s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu15ll, BFu16s_BFu17ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu17ll_BFu15s) C1{ Fs:16 FL:17 Fs:15}



static void Test_BFu16s_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 1, 15, 1, "BFu16s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu15s, BFu16s_BFu17ll_BFu15s)
//============================================================================


struct  BFu16s_BFu17ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu17ll_BFu16i) C1{ Fs:16 FL:17 Fi:16}



static void Test_BFu16s_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 1, 16, 1, "BFu16s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu16i, BFu16s_BFu17ll_BFu16i)
//============================================================================


struct  BFu16s_BFu17ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu17ll_BFu16ll) C1{ Fs:16 FL:17 FL:16}



static void Test_BFu16s_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 1, 16, 1, "BFu16s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu16ll, BFu16s_BFu17ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu17ll_BFu16s) C1{ Fs:16 FL:17 Fs:16}



static void Test_BFu16s_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu16s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu16s, BFu16s_BFu17ll_BFu16s)
//============================================================================


struct  BFu16s_BFu17ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu17ll_BFu17i) C1{ Fs:16 FL:17 Fi:17}



static void Test_BFu16s_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 1, 17, 1, "BFu16s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu17i, BFu16s_BFu17ll_BFu17i)
//============================================================================


struct  BFu16s_BFu17ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu17ll_BFu17ll) C1{ Fs:16 FL:17 FL:17}



static void Test_BFu16s_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 1, 17, 1, "BFu16s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu17ll, BFu16s_BFu17ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu17ll_BFu1c) C1{ Fs:16 FL:17 Fc:1}



static void Test_BFu16s_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu16s_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu1c, BFu16s_BFu17ll_BFu1c)
//============================================================================


struct  BFu16s_BFu17ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu17ll_BFu1i) C1{ Fs:16 FL:17 Fi:1}



static void Test_BFu16s_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu16s_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu1i, BFu16s_BFu17ll_BFu1i)
//============================================================================


struct  BFu16s_BFu17ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu17ll_BFu1ll) C1{ Fs:16 FL:17 FL:1}



static void Test_BFu16s_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu16s_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu1ll, BFu16s_BFu17ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu17ll_BFu1s) C1{ Fs:16 FL:17 Fs:1}



static void Test_BFu16s_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 1, 1, 1, "BFu16s_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu1s, BFu16s_BFu17ll_BFu1s)
//============================================================================


struct  BFu16s_BFu17ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu17ll_BFu31i) C1{ Fs:16 FL:17 Fi:31}



static void Test_BFu16s_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 1, 31, 1, "BFu16s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu31i, BFu16s_BFu17ll_BFu31i)
//============================================================================


struct  BFu16s_BFu17ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu17ll_BFu31ll) C1{ Fs:16 FL:17 FL:31}



static void Test_BFu16s_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 1, 31, 1, "BFu16s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu31ll, BFu16s_BFu17ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu17ll_BFu32i) C1{ Fs:16 FL:17 Fi:32}



static void Test_BFu16s_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu32i, BFu16s_BFu17ll_BFu32i)
//============================================================================


struct  BFu16s_BFu17ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu17ll_BFu32ll) C1{ Fs:16 FL:17 FL:32}



static void Test_BFu16s_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu16s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu16s_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu32ll, BFu16s_BFu17ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu17ll_BFu33) C1{ Fs:16 FL:17 FL:33}



static void Test_BFu16s_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu16s_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu16s_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu33, BFu16s_BFu17ll_BFu33)
//============================================================================


struct  BFu16s_BFu17ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu17ll_BFu7c) C1{ Fs:16 FL:17 Fc:7}



static void Test_BFu16s_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu16s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu7c, BFu16s_BFu17ll_BFu7c)
//============================================================================


struct  BFu16s_BFu17ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu17ll_BFu7i) C1{ Fs:16 FL:17 Fi:7}



static void Test_BFu16s_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu16s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu7i, BFu16s_BFu17ll_BFu7i)
//============================================================================


struct  BFu16s_BFu17ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu17ll_BFu7ll) C1{ Fs:16 FL:17 FL:7}



static void Test_BFu16s_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu16s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu7ll, BFu16s_BFu17ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu17ll_BFu7s) C1{ Fs:16 FL:17 Fs:7}



static void Test_BFu16s_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 1, 7, 1, "BFu16s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu7s, BFu16s_BFu17ll_BFu7s)
//============================================================================


struct  BFu16s_BFu17ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu17ll_BFu8c) C1{ Fs:16 FL:17 Fc:8}



static void Test_BFu16s_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu16s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu8c, BFu16s_BFu17ll_BFu8c)
//============================================================================


struct  BFu16s_BFu17ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu17ll_BFu8i) C1{ Fs:16 FL:17 Fi:8}



static void Test_BFu16s_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu16s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu8i, BFu16s_BFu17ll_BFu8i)
//============================================================================


struct  BFu16s_BFu17ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu17ll_BFu8ll) C1{ Fs:16 FL:17 FL:8}



static void Test_BFu16s_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu16s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu8ll, BFu16s_BFu17ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu17ll_BFu8s) C1{ Fs:16 FL:17 Fs:8}



static void Test_BFu16s_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 1, 8, 1, "BFu16s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu8s, BFu16s_BFu17ll_BFu8s)
//============================================================================


struct  BFu16s_BFu17ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu17ll_BFu9i) C1{ Fs:16 FL:17 Fi:9}



static void Test_BFu16s_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu16s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu9i, BFu16s_BFu17ll_BFu9i)
//============================================================================


struct  BFu16s_BFu17ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu17ll_BFu9ll) C1{ Fs:16 FL:17 FL:9}



static void Test_BFu16s_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu16s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu9ll, BFu16s_BFu17ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu17ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu17ll_BFu9s) C1{ Fs:16 FL:17 Fs:9}



static void Test_BFu16s_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 1, 9, 1, "BFu16s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_BFu9s, BFu16s_BFu17ll_BFu9s)
//============================================================================


struct  BFu16s_BFu17ll_C  {
  unsigned short v1:16;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu16s_BFu17ll_C) C1{ Fs:16 FL:17 Fc}



static void Test_BFu16s_BFu17ll_C()
{
  {
    init_simple_test("BFu16s_BFu17ll_C");
    static STRUCT_IF_C BFu16s_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_C");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_C");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_C");
    check_field_offset(lv, v3, 5, "BFu16s_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_C, BFu16s_BFu17ll_C)
//============================================================================


struct  BFu16s_BFu17ll_D  {
  unsigned short v1:16;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu16s_BFu17ll_D) C1{ Fs:16 FL:17 FL}



static void Test_BFu16s_BFu17ll_D()
{
  {
    init_simple_test("BFu16s_BFu17ll_D");
    static STRUCT_IF_C BFu16s_BFu17ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_D");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_D");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_D");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_D, BFu16s_BFu17ll_D)
//============================================================================


struct  BFu16s_BFu17ll_F  {
  unsigned short v1:16;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu16s_BFu17ll_F) C1{ Fs:16 FL:17 Fi}



static void Test_BFu16s_BFu17ll_F()
{
  {
    init_simple_test("BFu16s_BFu17ll_F");
    static STRUCT_IF_C BFu16s_BFu17ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_F");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_F");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_F");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_F, BFu16s_BFu17ll_F)
//============================================================================


struct  BFu16s_BFu17ll_I  {
  unsigned short v1:16;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu16s_BFu17ll_I) C1{ Fs:16 FL:17 Fi}



static void Test_BFu16s_BFu17ll_I()
{
  {
    init_simple_test("BFu16s_BFu17ll_I");
    static STRUCT_IF_C BFu16s_BFu17ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_I");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_I");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_I");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_I, BFu16s_BFu17ll_I)
//============================================================================


struct  BFu16s_BFu17ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu16s_BFu17ll_Ip) C1{ Fs:16 FL:17 Fp}



static void Test_BFu16s_BFu17ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu17ll_Ip");
    static STRUCT_IF_C BFu16s_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_Ip");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_Ip, BFu16s_BFu17ll_Ip)
//============================================================================


struct  BFu16s_BFu17ll_L  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu17ll_L) C1{ Fs:16 FL:17 FL}



static void Test_BFu16s_BFu17ll_L()
{
  {
    init_simple_test("BFu16s_BFu17ll_L");
    static STRUCT_IF_C BFu16s_BFu17ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_L");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_L");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_L");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_L, BFu16s_BFu17ll_L)
//============================================================================


struct  BFu16s_BFu17ll_S  {
  unsigned short v1:16;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu16s_BFu17ll_S) C1{ Fs:16 FL:17 Fs}



static void Test_BFu16s_BFu17ll_S()
{
  {
    init_simple_test("BFu16s_BFu17ll_S");
    static STRUCT_IF_C BFu16s_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_S");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_S");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_S");
    check_field_offset(lv, v3, 6, "BFu16s_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_S, BFu16s_BFu17ll_S)
//============================================================================


struct  BFu16s_BFu17ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu17ll_Uc) C1{ Fs:16 FL:17 Fc}



static void Test_BFu16s_BFu17ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu17ll_Uc");
    static STRUCT_IF_C BFu16s_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_Uc");
    check_field_offset(lv, v3, 5, "BFu16s_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_Uc, BFu16s_BFu17ll_Uc)
//============================================================================


struct  BFu16s_BFu17ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu17ll_Ui) C1{ Fs:16 FL:17 Fi}



static void Test_BFu16s_BFu17ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu17ll_Ui");
    static STRUCT_IF_C BFu16s_BFu17ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_Ui");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_Ui, BFu16s_BFu17ll_Ui)
//============================================================================


struct  BFu16s_BFu17ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu17ll_Ul) C1{ Fs:16 FL:17 FL}



static void Test_BFu16s_BFu17ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu17ll_Ul");
    static STRUCT_IF_C BFu16s_BFu17ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_Ul");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_Ul, BFu16s_BFu17ll_Ul)
//============================================================================


struct  BFu16s_BFu17ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu17ll_Us) C1{ Fs:16 FL:17 Fs}



static void Test_BFu16s_BFu17ll_Us()
{
  {
    init_simple_test("BFu16s_BFu17ll_Us");
    static STRUCT_IF_C BFu16s_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_Us");
    check_field_offset(lv, v3, 6, "BFu16s_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_Us, BFu16s_BFu17ll_Us)
//============================================================================


struct  BFu16s_BFu17ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu16s_BFu17ll_Vp) C1{ Fs:16 FL:17 Fp}



static void Test_BFu16s_BFu17ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu17ll_Vp");
    static STRUCT_IF_C BFu16s_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_Vp");
    check_field_offset(lv, v3, 8, "BFu16s_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu17ll_Vp, BFu16s_BFu17ll_Vp)
//============================================================================


struct  BFu16s_BFu1c  {
  unsigned short v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu16s_BFu1c) C1{ Fs:16 Fc:1}



static void Test_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu1c");
    static STRUCT_IF_C BFu16s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c, BFu16s_BFu1c)
//============================================================================


struct  BFu16s_BFu1c_BFu15i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu1c_BFu15i) C1{ Fs:16 Fc:1 Fi:15}



static void Test_BFu16s_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu15i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu15i, BFu16s_BFu1c_BFu15i)
//============================================================================


struct  BFu16s_BFu1c_BFu15ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu1c_BFu15ll) C1{ Fs:16 Fc:1 FL:15}



static void Test_BFu16s_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu15ll, BFu16s_BFu1c_BFu15ll)
//============================================================================


struct  BFu16s_BFu1c_BFu15s  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu1c_BFu15s) C1{ Fs:16 Fc:1 Fs:15}



static void Test_BFu16s_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu15s");
    static STRUCT_IF_C BFu16s_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu15s, BFu16s_BFu1c_BFu15s)
//============================================================================


struct  BFu16s_BFu1c_BFu16i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu1c_BFu16i) C1{ Fs:16 Fc:1 Fi:16}



static void Test_BFu16s_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu16i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu16i, BFu16s_BFu1c_BFu16i)
//============================================================================


struct  BFu16s_BFu1c_BFu16ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu1c_BFu16ll) C1{ Fs:16 Fc:1 FL:16}



static void Test_BFu16s_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "BFu16s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu16ll, BFu16s_BFu1c_BFu16ll)
//============================================================================


struct  BFu16s_BFu1c_BFu16s  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu1c_BFu16s) C1{ Fs:16 Fc:1 Fs:16}



static void Test_BFu16s_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu16s");
    static STRUCT_IF_C BFu16s_BFu1c_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu16s, BFu16s_BFu1c_BFu16s)
//============================================================================


struct  BFu16s_BFu1c_BFu17i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu1c_BFu17i) C1{ Fs:16 Fc:1 Fi:17}



static void Test_BFu16s_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu17i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu17i, BFu16s_BFu1c_BFu17i)
//============================================================================


struct  BFu16s_BFu1c_BFu17ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu1c_BFu17ll) C1{ Fs:16 Fc:1 FL:17}



static void Test_BFu16s_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "BFu16s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu17ll, BFu16s_BFu1c_BFu17ll)
//============================================================================


struct  BFu16s_BFu1c_BFu1c  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu1c_BFu1c) C1{ Fs:16 Fc:1 Fc:1}



static void Test_BFu16s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu1c");
    static STRUCT_IF_C BFu16s_BFu1c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu1c, BFu16s_BFu1c_BFu1c)
//============================================================================


struct  BFu16s_BFu1c_BFu1i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu1c_BFu1i) C1{ Fs:16 Fc:1 Fi:1}



static void Test_BFu16s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu1i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu1i, BFu16s_BFu1c_BFu1i)
//============================================================================


struct  BFu16s_BFu1c_BFu1ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu1c_BFu1ll) C1{ Fs:16 Fc:1 FL:1}



static void Test_BFu16s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu1ll, BFu16s_BFu1c_BFu1ll)
//============================================================================


struct  BFu16s_BFu1c_BFu1s  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu1c_BFu1s) C1{ Fs:16 Fc:1 Fs:1}



static void Test_BFu16s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu1s");
    static STRUCT_IF_C BFu16s_BFu1c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu1s, BFu16s_BFu1c_BFu1s)
//============================================================================


struct  BFu16s_BFu1c_BFu31i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu1c_BFu31i) C1{ Fs:16 Fc:1 Fi:31}



static void Test_BFu16s_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu31i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu31i, BFu16s_BFu1c_BFu31i)
//============================================================================


struct  BFu16s_BFu1c_BFu31ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu1c_BFu31ll) C1{ Fs:16 Fc:1 FL:31}



static void Test_BFu16s_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "BFu16s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu31ll, BFu16s_BFu1c_BFu31ll)
//============================================================================


struct  BFu16s_BFu1c_BFu32i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu1c_BFu32i) C1{ Fs:16 Fc:1 Fi:32}



static void Test_BFu16s_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu32i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu32i, BFu16s_BFu1c_BFu32i)
//============================================================================


struct  BFu16s_BFu1c_BFu32ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu1c_BFu32ll) C1{ Fs:16 Fc:1 FL:32}



static void Test_BFu16s_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "BFu16s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "BFu16s_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu32ll, BFu16s_BFu1c_BFu32ll)
//============================================================================


struct  BFu16s_BFu1c_BFu33  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu1c_BFu33) C1{ Fs:16 Fc:1 FL:33}



static void Test_BFu16s_BFu1c_BFu33()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu33");
    static STRUCT_IF_C BFu16s_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "BFu16s_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "BFu16s_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu33, BFu16s_BFu1c_BFu33)
//============================================================================


struct  BFu16s_BFu1c_BFu7c  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu1c_BFu7c) C1{ Fs:16 Fc:1 Fc:7}



static void Test_BFu16s_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu7c");
    static STRUCT_IF_C BFu16s_BFu1c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu7c, BFu16s_BFu1c_BFu7c)
//============================================================================


struct  BFu16s_BFu1c_BFu7i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu1c_BFu7i) C1{ Fs:16 Fc:1 Fi:7}



static void Test_BFu16s_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu7i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu7i, BFu16s_BFu1c_BFu7i)
//============================================================================


struct  BFu16s_BFu1c_BFu7ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu1c_BFu7ll) C1{ Fs:16 Fc:1 FL:7}



static void Test_BFu16s_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu7ll, BFu16s_BFu1c_BFu7ll)
//============================================================================


struct  BFu16s_BFu1c_BFu7s  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu1c_BFu7s) C1{ Fs:16 Fc:1 Fs:7}



static void Test_BFu16s_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu7s");
    static STRUCT_IF_C BFu16s_BFu1c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu7s, BFu16s_BFu1c_BFu7s)
//============================================================================


struct  BFu16s_BFu1c_BFu8c  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu1c_BFu8c) C1{ Fs:16 Fc:1 Fc:8}



static void Test_BFu16s_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu8c");
    static STRUCT_IF_C BFu16s_BFu1c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu8c, BFu16s_BFu1c_BFu8c)
//============================================================================


struct  BFu16s_BFu1c_BFu8i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu1c_BFu8i) C1{ Fs:16 Fc:1 Fi:8}



static void Test_BFu16s_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu8i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu8i, BFu16s_BFu1c_BFu8i)
//============================================================================


struct  BFu16s_BFu1c_BFu8ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu1c_BFu8ll) C1{ Fs:16 Fc:1 FL:8}



static void Test_BFu16s_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu8ll, BFu16s_BFu1c_BFu8ll)
//============================================================================


struct  BFu16s_BFu1c_BFu8s  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu1c_BFu8s) C1{ Fs:16 Fc:1 Fs:8}



static void Test_BFu16s_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu8s");
    static STRUCT_IF_C BFu16s_BFu1c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu8s, BFu16s_BFu1c_BFu8s)
//============================================================================


struct  BFu16s_BFu1c_BFu9i  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu1c_BFu9i) C1{ Fs:16 Fc:1 Fi:9}



static void Test_BFu16s_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu9i");
    static STRUCT_IF_C BFu16s_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu9i, BFu16s_BFu1c_BFu9i)
//============================================================================


struct  BFu16s_BFu1c_BFu9ll  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu1c_BFu9ll) C1{ Fs:16 Fc:1 FL:9}



static void Test_BFu16s_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu9ll, BFu16s_BFu1c_BFu9ll)
//============================================================================


struct  BFu16s_BFu1c_BFu9s  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu1c_BFu9s) C1{ Fs:16 Fc:1 Fs:9}



static void Test_BFu16s_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu1c_BFu9s");
    static STRUCT_IF_C BFu16s_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_BFu9s, BFu16s_BFu1c_BFu9s)
//============================================================================


struct  BFu16s_BFu1c_C  {
  unsigned short v1:16;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu16s_BFu1c_C) C1{ Fs:16 Fc:1 Fc}



static void Test_BFu16s_BFu1c_C()
{
  {
    init_simple_test("BFu16s_BFu1c_C");
    static STRUCT_IF_C BFu16s_BFu1c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_C");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_C, BFu16s_BFu1c_C)
//============================================================================


struct  BFu16s_BFu1c_D  {
  unsigned short v1:16;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu16s_BFu1c_D) C1{ Fs:16 Fc:1 FL}



static void Test_BFu16s_BFu1c_D()
{
  {
    init_simple_test("BFu16s_BFu1c_D");
    static STRUCT_IF_C BFu16s_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_D");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_D, BFu16s_BFu1c_D)
//============================================================================


struct  BFu16s_BFu1c_F  {
  unsigned short v1:16;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu16s_BFu1c_F) C1{ Fs:16 Fc:1 Fi}



static void Test_BFu16s_BFu1c_F()
{
  {
    init_simple_test("BFu16s_BFu1c_F");
    static STRUCT_IF_C BFu16s_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_F");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_F, BFu16s_BFu1c_F)
//============================================================================


struct  BFu16s_BFu1c_I  {
  unsigned short v1:16;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu16s_BFu1c_I) C1{ Fs:16 Fc:1 Fi}



static void Test_BFu16s_BFu1c_I()
{
  {
    init_simple_test("BFu16s_BFu1c_I");
    static STRUCT_IF_C BFu16s_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_I");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_I, BFu16s_BFu1c_I)
//============================================================================


struct  BFu16s_BFu1c_Ip  {
  unsigned short v1:16;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu16s_BFu1c_Ip) C1{ Fs:16 Fc:1 Fp}



static void Test_BFu16s_BFu1c_Ip()
{
  {
    init_simple_test("BFu16s_BFu1c_Ip");
    static STRUCT_IF_C BFu16s_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_Ip, BFu16s_BFu1c_Ip)
//============================================================================


struct  BFu16s_BFu1c_L  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu1c_L) C1{ Fs:16 Fc:1 FL}



static void Test_BFu16s_BFu1c_L()
{
  {
    init_simple_test("BFu16s_BFu1c_L");
    static STRUCT_IF_C BFu16s_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_L");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_L, BFu16s_BFu1c_L)
//============================================================================


struct  BFu16s_BFu1c_S  {
  unsigned short v1:16;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu16s_BFu1c_S) C1{ Fs:16 Fc:1 Fs}



static void Test_BFu16s_BFu1c_S()
{
  {
    init_simple_test("BFu16s_BFu1c_S");
    static STRUCT_IF_C BFu16s_BFu1c_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_S");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_S, BFu16s_BFu1c_S)
//============================================================================


struct  BFu16s_BFu1c_Uc  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu1c_Uc) C1{ Fs:16 Fc:1 Fc}



static void Test_BFu16s_BFu1c_Uc()
{
  {
    init_simple_test("BFu16s_BFu1c_Uc");
    static STRUCT_IF_C BFu16s_BFu1c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_Uc, BFu16s_BFu1c_Uc)
//============================================================================


struct  BFu16s_BFu1c_Ui  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu1c_Ui) C1{ Fs:16 Fc:1 Fi}



static void Test_BFu16s_BFu1c_Ui()
{
  {
    init_simple_test("BFu16s_BFu1c_Ui");
    static STRUCT_IF_C BFu16s_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_Ui, BFu16s_BFu1c_Ui)
//============================================================================


struct  BFu16s_BFu1c_Ul  {
  unsigned short v1:16;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu1c_Ul) C1{ Fs:16 Fc:1 FL}



static void Test_BFu16s_BFu1c_Ul()
{
  {
    init_simple_test("BFu16s_BFu1c_Ul");
    static STRUCT_IF_C BFu16s_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_Ul, BFu16s_BFu1c_Ul)
//============================================================================


struct  BFu16s_BFu1c_Us  {
  unsigned short v1:16;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu1c_Us) C1{ Fs:16 Fc:1 Fs}



static void Test_BFu16s_BFu1c_Us()
{
  {
    init_simple_test("BFu16s_BFu1c_Us");
    static STRUCT_IF_C BFu16s_BFu1c_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_Us");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_Us, BFu16s_BFu1c_Us)
//============================================================================


struct  BFu16s_BFu1c_Vp  {
  unsigned short v1:16;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu16s_BFu1c_Vp) C1{ Fs:16 Fc:1 Fp}



static void Test_BFu16s_BFu1c_Vp()
{
  {
    init_simple_test("BFu16s_BFu1c_Vp");
    static STRUCT_IF_C BFu16s_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1c_Vp, BFu16s_BFu1c_Vp)
//============================================================================


struct  BFu16s_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu16s_BFu1i) C1{ Fs:16 Fi:1}



static void Test_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu1i");
    static STRUCT_IF_C BFu16s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i, BFu16s_BFu1i)
//============================================================================


struct  BFu16s_BFu1i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu1i_BFu15i) C1{ Fs:16 Fi:1 Fi:15}



static void Test_BFu16s_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu15i, BFu16s_BFu1i_BFu15i)
//============================================================================


struct  BFu16s_BFu1i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu1i_BFu15ll) C1{ Fs:16 Fi:1 FL:15}



static void Test_BFu16s_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu15ll, BFu16s_BFu1i_BFu15ll)
//============================================================================


struct  BFu16s_BFu1i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu1i_BFu15s) C1{ Fs:16 Fi:1 Fs:15}



static void Test_BFu16s_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu15s, BFu16s_BFu1i_BFu15s)
//============================================================================


struct  BFu16s_BFu1i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu1i_BFu16i) C1{ Fs:16 Fi:1 Fi:16}



static void Test_BFu16s_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu16i, BFu16s_BFu1i_BFu16i)
//============================================================================


struct  BFu16s_BFu1i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu1i_BFu16ll) C1{ Fs:16 Fi:1 FL:16}



static void Test_BFu16s_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "BFu16s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu16ll, BFu16s_BFu1i_BFu16ll)
//============================================================================


struct  BFu16s_BFu1i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu1i_BFu16s) C1{ Fs:16 Fi:1 Fs:16}



static void Test_BFu16s_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu1i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu16s, BFu16s_BFu1i_BFu16s)
//============================================================================


struct  BFu16s_BFu1i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu1i_BFu17i) C1{ Fs:16 Fi:1 Fi:17}



static void Test_BFu16s_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu17i, BFu16s_BFu1i_BFu17i)
//============================================================================


struct  BFu16s_BFu1i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu1i_BFu17ll) C1{ Fs:16 Fi:1 FL:17}



static void Test_BFu16s_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "BFu16s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu17ll, BFu16s_BFu1i_BFu17ll)
//============================================================================


struct  BFu16s_BFu1i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu1i_BFu1c) C1{ Fs:16 Fi:1 Fc:1}



static void Test_BFu16s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu1c, BFu16s_BFu1i_BFu1c)
//============================================================================


struct  BFu16s_BFu1i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu1i_BFu1i) C1{ Fs:16 Fi:1 Fi:1}



static void Test_BFu16s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu1i, BFu16s_BFu1i_BFu1i)
//============================================================================


struct  BFu16s_BFu1i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu1i_BFu1ll) C1{ Fs:16 Fi:1 FL:1}



static void Test_BFu16s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu1ll, BFu16s_BFu1i_BFu1ll)
//============================================================================


struct  BFu16s_BFu1i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu1i_BFu1s) C1{ Fs:16 Fi:1 Fs:1}



static void Test_BFu16s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu1s, BFu16s_BFu1i_BFu1s)
//============================================================================


struct  BFu16s_BFu1i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu1i_BFu31i) C1{ Fs:16 Fi:1 Fi:31}



static void Test_BFu16s_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu31i, BFu16s_BFu1i_BFu31i)
//============================================================================


struct  BFu16s_BFu1i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu1i_BFu31ll) C1{ Fs:16 Fi:1 FL:31}



static void Test_BFu16s_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "BFu16s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu31ll, BFu16s_BFu1i_BFu31ll)
//============================================================================


struct  BFu16s_BFu1i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu1i_BFu32i) C1{ Fs:16 Fi:1 Fi:32}



static void Test_BFu16s_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu32i, BFu16s_BFu1i_BFu32i)
//============================================================================


struct  BFu16s_BFu1i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu1i_BFu32ll) C1{ Fs:16 Fi:1 FL:32}



static void Test_BFu16s_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "BFu16s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "BFu16s_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu32ll, BFu16s_BFu1i_BFu32ll)
//============================================================================


struct  BFu16s_BFu1i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu1i_BFu33) C1{ Fs:16 Fi:1 FL:33}



static void Test_BFu16s_BFu1i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu33");
    static STRUCT_IF_C BFu16s_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "BFu16s_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "BFu16s_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu33, BFu16s_BFu1i_BFu33)
//============================================================================


struct  BFu16s_BFu1i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu1i_BFu7c) C1{ Fs:16 Fi:1 Fc:7}



static void Test_BFu16s_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu7c, BFu16s_BFu1i_BFu7c)
//============================================================================


struct  BFu16s_BFu1i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu1i_BFu7i) C1{ Fs:16 Fi:1 Fi:7}



static void Test_BFu16s_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu7i, BFu16s_BFu1i_BFu7i)
//============================================================================


struct  BFu16s_BFu1i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu1i_BFu7ll) C1{ Fs:16 Fi:1 FL:7}



static void Test_BFu16s_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu7ll, BFu16s_BFu1i_BFu7ll)
//============================================================================


struct  BFu16s_BFu1i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu1i_BFu7s) C1{ Fs:16 Fi:1 Fs:7}



static void Test_BFu16s_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu7s, BFu16s_BFu1i_BFu7s)
//============================================================================


struct  BFu16s_BFu1i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu1i_BFu8c) C1{ Fs:16 Fi:1 Fc:8}



static void Test_BFu16s_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu8c, BFu16s_BFu1i_BFu8c)
//============================================================================


struct  BFu16s_BFu1i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu1i_BFu8i) C1{ Fs:16 Fi:1 Fi:8}



static void Test_BFu16s_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu8i, BFu16s_BFu1i_BFu8i)
//============================================================================


struct  BFu16s_BFu1i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu1i_BFu8ll) C1{ Fs:16 Fi:1 FL:8}



static void Test_BFu16s_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu8ll, BFu16s_BFu1i_BFu8ll)
//============================================================================


struct  BFu16s_BFu1i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu1i_BFu8s) C1{ Fs:16 Fi:1 Fs:8}



static void Test_BFu16s_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu8s, BFu16s_BFu1i_BFu8s)
//============================================================================


struct  BFu16s_BFu1i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu1i_BFu9i) C1{ Fs:16 Fi:1 Fi:9}



static void Test_BFu16s_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu9i, BFu16s_BFu1i_BFu9i)
//============================================================================


struct  BFu16s_BFu1i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu1i_BFu9ll) C1{ Fs:16 Fi:1 FL:9}



static void Test_BFu16s_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu9ll, BFu16s_BFu1i_BFu9ll)
//============================================================================


struct  BFu16s_BFu1i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu1i_BFu9s) C1{ Fs:16 Fi:1 Fs:9}



static void Test_BFu16s_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu1i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_BFu9s, BFu16s_BFu1i_BFu9s)
//============================================================================


struct  BFu16s_BFu1i_C  {
  unsigned short v1:16;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu16s_BFu1i_C) C1{ Fs:16 Fi:1 Fc}



static void Test_BFu16s_BFu1i_C()
{
  {
    init_simple_test("BFu16s_BFu1i_C");
    static STRUCT_IF_C BFu16s_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_C");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_C, BFu16s_BFu1i_C)
//============================================================================


struct  BFu16s_BFu1i_D  {
  unsigned short v1:16;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu16s_BFu1i_D) C1{ Fs:16 Fi:1 FL}



static void Test_BFu16s_BFu1i_D()
{
  {
    init_simple_test("BFu16s_BFu1i_D");
    static STRUCT_IF_C BFu16s_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_D");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_D, BFu16s_BFu1i_D)
//============================================================================


struct  BFu16s_BFu1i_F  {
  unsigned short v1:16;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu16s_BFu1i_F) C1{ Fs:16 Fi:1 Fi}



static void Test_BFu16s_BFu1i_F()
{
  {
    init_simple_test("BFu16s_BFu1i_F");
    static STRUCT_IF_C BFu16s_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_F");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_F, BFu16s_BFu1i_F)
//============================================================================


struct  BFu16s_BFu1i_I  {
  unsigned short v1:16;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu16s_BFu1i_I) C1{ Fs:16 Fi:1 Fi}



static void Test_BFu16s_BFu1i_I()
{
  {
    init_simple_test("BFu16s_BFu1i_I");
    static STRUCT_IF_C BFu16s_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_I");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_I, BFu16s_BFu1i_I)
//============================================================================


struct  BFu16s_BFu1i_Ip  {
  unsigned short v1:16;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu16s_BFu1i_Ip) C1{ Fs:16 Fi:1 Fp}



static void Test_BFu16s_BFu1i_Ip()
{
  {
    init_simple_test("BFu16s_BFu1i_Ip");
    static STRUCT_IF_C BFu16s_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_Ip, BFu16s_BFu1i_Ip)
//============================================================================


struct  BFu16s_BFu1i_L  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu1i_L) C1{ Fs:16 Fi:1 FL}



static void Test_BFu16s_BFu1i_L()
{
  {
    init_simple_test("BFu16s_BFu1i_L");
    static STRUCT_IF_C BFu16s_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_L");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_L, BFu16s_BFu1i_L)
//============================================================================


struct  BFu16s_BFu1i_S  {
  unsigned short v1:16;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu16s_BFu1i_S) C1{ Fs:16 Fi:1 Fs}



static void Test_BFu16s_BFu1i_S()
{
  {
    init_simple_test("BFu16s_BFu1i_S");
    static STRUCT_IF_C BFu16s_BFu1i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_S");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_S, BFu16s_BFu1i_S)
//============================================================================


struct  BFu16s_BFu1i_Uc  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu1i_Uc) C1{ Fs:16 Fi:1 Fc}



static void Test_BFu16s_BFu1i_Uc()
{
  {
    init_simple_test("BFu16s_BFu1i_Uc");
    static STRUCT_IF_C BFu16s_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_Uc, BFu16s_BFu1i_Uc)
//============================================================================


struct  BFu16s_BFu1i_Ui  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu1i_Ui) C1{ Fs:16 Fi:1 Fi}



static void Test_BFu16s_BFu1i_Ui()
{
  {
    init_simple_test("BFu16s_BFu1i_Ui");
    static STRUCT_IF_C BFu16s_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_Ui, BFu16s_BFu1i_Ui)
//============================================================================


struct  BFu16s_BFu1i_Ul  {
  unsigned short v1:16;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu1i_Ul) C1{ Fs:16 Fi:1 FL}



static void Test_BFu16s_BFu1i_Ul()
{
  {
    init_simple_test("BFu16s_BFu1i_Ul");
    static STRUCT_IF_C BFu16s_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_Ul, BFu16s_BFu1i_Ul)
//============================================================================


struct  BFu16s_BFu1i_Us  {
  unsigned short v1:16;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu1i_Us) C1{ Fs:16 Fi:1 Fs}



static void Test_BFu16s_BFu1i_Us()
{
  {
    init_simple_test("BFu16s_BFu1i_Us");
    static STRUCT_IF_C BFu16s_BFu1i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_Us");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_Us, BFu16s_BFu1i_Us)
//============================================================================


struct  BFu16s_BFu1i_Vp  {
  unsigned short v1:16;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu16s_BFu1i_Vp) C1{ Fs:16 Fi:1 Fp}



static void Test_BFu16s_BFu1i_Vp()
{
  {
    init_simple_test("BFu16s_BFu1i_Vp");
    static STRUCT_IF_C BFu16s_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1i_Vp, BFu16s_BFu1i_Vp)
//============================================================================


struct  BFu16s_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu16s_BFu1ll) C1{ Fs:16 FL:1}



static void Test_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll, BFu16s_BFu1ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu1ll_BFu15i) C1{ Fs:16 FL:1 Fi:15}



static void Test_BFu16s_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu15i, BFu16s_BFu1ll_BFu15i)
//============================================================================


struct  BFu16s_BFu1ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu1ll_BFu15ll) C1{ Fs:16 FL:1 FL:15}



static void Test_BFu16s_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu15ll, BFu16s_BFu1ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu1ll_BFu15s) C1{ Fs:16 FL:1 Fs:15}



static void Test_BFu16s_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu15s, BFu16s_BFu1ll_BFu15s)
//============================================================================


struct  BFu16s_BFu1ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu1ll_BFu16i) C1{ Fs:16 FL:1 Fi:16}



static void Test_BFu16s_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu16i, BFu16s_BFu1ll_BFu16i)
//============================================================================


struct  BFu16s_BFu1ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu1ll_BFu16ll) C1{ Fs:16 FL:1 FL:16}



static void Test_BFu16s_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "BFu16s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu16ll, BFu16s_BFu1ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu1ll_BFu16s) C1{ Fs:16 FL:1 Fs:16}



static void Test_BFu16s_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu16s, BFu16s_BFu1ll_BFu16s)
//============================================================================


struct  BFu16s_BFu1ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu1ll_BFu17i) C1{ Fs:16 FL:1 Fi:17}



static void Test_BFu16s_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu17i, BFu16s_BFu1ll_BFu17i)
//============================================================================


struct  BFu16s_BFu1ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu1ll_BFu17ll) C1{ Fs:16 FL:1 FL:17}



static void Test_BFu16s_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "BFu16s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu17ll, BFu16s_BFu1ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu1ll_BFu1c) C1{ Fs:16 FL:1 Fc:1}



static void Test_BFu16s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu1c, BFu16s_BFu1ll_BFu1c)
//============================================================================


struct  BFu16s_BFu1ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu1ll_BFu1i) C1{ Fs:16 FL:1 Fi:1}



static void Test_BFu16s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu1i, BFu16s_BFu1ll_BFu1i)
//============================================================================


struct  BFu16s_BFu1ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu1ll_BFu1ll) C1{ Fs:16 FL:1 FL:1}



static void Test_BFu16s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu1ll, BFu16s_BFu1ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu1ll_BFu1s) C1{ Fs:16 FL:1 Fs:1}



static void Test_BFu16s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu1s, BFu16s_BFu1ll_BFu1s)
//============================================================================


struct  BFu16s_BFu1ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu1ll_BFu31i) C1{ Fs:16 FL:1 Fi:31}



static void Test_BFu16s_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu31i, BFu16s_BFu1ll_BFu31i)
//============================================================================


struct  BFu16s_BFu1ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu1ll_BFu31ll) C1{ Fs:16 FL:1 FL:31}



static void Test_BFu16s_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "BFu16s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu31ll, BFu16s_BFu1ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu1ll_BFu32i) C1{ Fs:16 FL:1 Fi:32}



static void Test_BFu16s_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu32i, BFu16s_BFu1ll_BFu32i)
//============================================================================


struct  BFu16s_BFu1ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu1ll_BFu32ll) C1{ Fs:16 FL:1 FL:32}



static void Test_BFu16s_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "BFu16s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "BFu16s_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu32ll, BFu16s_BFu1ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu1ll_BFu33) C1{ Fs:16 FL:1 FL:33}



static void Test_BFu16s_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "BFu16s_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "BFu16s_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu33, BFu16s_BFu1ll_BFu33)
//============================================================================


struct  BFu16s_BFu1ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu1ll_BFu7c) C1{ Fs:16 FL:1 Fc:7}



static void Test_BFu16s_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu7c, BFu16s_BFu1ll_BFu7c)
//============================================================================


struct  BFu16s_BFu1ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu1ll_BFu7i) C1{ Fs:16 FL:1 Fi:7}



static void Test_BFu16s_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu7i, BFu16s_BFu1ll_BFu7i)
//============================================================================


struct  BFu16s_BFu1ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu1ll_BFu7ll) C1{ Fs:16 FL:1 FL:7}



static void Test_BFu16s_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu7ll, BFu16s_BFu1ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu1ll_BFu7s) C1{ Fs:16 FL:1 Fs:7}



static void Test_BFu16s_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu7s, BFu16s_BFu1ll_BFu7s)
//============================================================================


struct  BFu16s_BFu1ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu1ll_BFu8c) C1{ Fs:16 FL:1 Fc:8}



static void Test_BFu16s_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu8c, BFu16s_BFu1ll_BFu8c)
//============================================================================


struct  BFu16s_BFu1ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu1ll_BFu8i) C1{ Fs:16 FL:1 Fi:8}



static void Test_BFu16s_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu8i, BFu16s_BFu1ll_BFu8i)
//============================================================================


struct  BFu16s_BFu1ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu1ll_BFu8ll) C1{ Fs:16 FL:1 FL:8}



static void Test_BFu16s_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu8ll, BFu16s_BFu1ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu1ll_BFu8s) C1{ Fs:16 FL:1 Fs:8}



static void Test_BFu16s_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu8s, BFu16s_BFu1ll_BFu8s)
//============================================================================


struct  BFu16s_BFu1ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu1ll_BFu9i) C1{ Fs:16 FL:1 Fi:9}



static void Test_BFu16s_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu9i, BFu16s_BFu1ll_BFu9i)
//============================================================================


struct  BFu16s_BFu1ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu1ll_BFu9ll) C1{ Fs:16 FL:1 FL:9}



static void Test_BFu16s_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu9ll, BFu16s_BFu1ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu1ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu1ll_BFu9s) C1{ Fs:16 FL:1 Fs:9}



static void Test_BFu16s_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_BFu9s, BFu16s_BFu1ll_BFu9s)
//============================================================================


struct  BFu16s_BFu1ll_C  {
  unsigned short v1:16;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu16s_BFu1ll_C) C1{ Fs:16 FL:1 Fc}



static void Test_BFu16s_BFu1ll_C()
{
  {
    init_simple_test("BFu16s_BFu1ll_C");
    static STRUCT_IF_C BFu16s_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_C");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_C, BFu16s_BFu1ll_C)
//============================================================================


struct  BFu16s_BFu1ll_D  {
  unsigned short v1:16;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu16s_BFu1ll_D) C1{ Fs:16 FL:1 FL}



static void Test_BFu16s_BFu1ll_D()
{
  {
    init_simple_test("BFu16s_BFu1ll_D");
    static STRUCT_IF_C BFu16s_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_D");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_D, BFu16s_BFu1ll_D)
//============================================================================


struct  BFu16s_BFu1ll_F  {
  unsigned short v1:16;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu16s_BFu1ll_F) C1{ Fs:16 FL:1 Fi}



static void Test_BFu16s_BFu1ll_F()
{
  {
    init_simple_test("BFu16s_BFu1ll_F");
    static STRUCT_IF_C BFu16s_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_F");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_F, BFu16s_BFu1ll_F)
//============================================================================


struct  BFu16s_BFu1ll_I  {
  unsigned short v1:16;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu16s_BFu1ll_I) C1{ Fs:16 FL:1 Fi}



static void Test_BFu16s_BFu1ll_I()
{
  {
    init_simple_test("BFu16s_BFu1ll_I");
    static STRUCT_IF_C BFu16s_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_I");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_I, BFu16s_BFu1ll_I)
//============================================================================


struct  BFu16s_BFu1ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu16s_BFu1ll_Ip) C1{ Fs:16 FL:1 Fp}



static void Test_BFu16s_BFu1ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu1ll_Ip");
    static STRUCT_IF_C BFu16s_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_Ip, BFu16s_BFu1ll_Ip)
//============================================================================


struct  BFu16s_BFu1ll_L  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu1ll_L) C1{ Fs:16 FL:1 FL}



static void Test_BFu16s_BFu1ll_L()
{
  {
    init_simple_test("BFu16s_BFu1ll_L");
    static STRUCT_IF_C BFu16s_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_L");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_L, BFu16s_BFu1ll_L)
//============================================================================


struct  BFu16s_BFu1ll_S  {
  unsigned short v1:16;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu16s_BFu1ll_S) C1{ Fs:16 FL:1 Fs}



static void Test_BFu16s_BFu1ll_S()
{
  {
    init_simple_test("BFu16s_BFu1ll_S");
    static STRUCT_IF_C BFu16s_BFu1ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_S");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_S, BFu16s_BFu1ll_S)
//============================================================================


struct  BFu16s_BFu1ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu1ll_Uc) C1{ Fs:16 FL:1 Fc}



static void Test_BFu16s_BFu1ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu1ll_Uc");
    static STRUCT_IF_C BFu16s_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_Uc, BFu16s_BFu1ll_Uc)
//============================================================================


struct  BFu16s_BFu1ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu1ll_Ui) C1{ Fs:16 FL:1 Fi}



static void Test_BFu16s_BFu1ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu1ll_Ui");
    static STRUCT_IF_C BFu16s_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_Ui, BFu16s_BFu1ll_Ui)
//============================================================================


struct  BFu16s_BFu1ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu1ll_Ul) C1{ Fs:16 FL:1 FL}



static void Test_BFu16s_BFu1ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu1ll_Ul");
    static STRUCT_IF_C BFu16s_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_Ul, BFu16s_BFu1ll_Ul)
//============================================================================


struct  BFu16s_BFu1ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu1ll_Us) C1{ Fs:16 FL:1 Fs}



static void Test_BFu16s_BFu1ll_Us()
{
  {
    init_simple_test("BFu16s_BFu1ll_Us");
    static STRUCT_IF_C BFu16s_BFu1ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_Us, BFu16s_BFu1ll_Us)
//============================================================================


struct  BFu16s_BFu1ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu16s_BFu1ll_Vp) C1{ Fs:16 FL:1 Fp}



static void Test_BFu16s_BFu1ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu1ll_Vp");
    static STRUCT_IF_C BFu16s_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1ll_Vp, BFu16s_BFu1ll_Vp)
//============================================================================


struct  BFu16s_BFu1s  {
  unsigned short v1:16;
  unsigned short v2:1;
};
//SIG(1 BFu16s_BFu1s) C1{ Fs:16 Fs:1}



static void Test_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu1s");
    static STRUCT_IF_C BFu16s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s, BFu16s_BFu1s)
//============================================================================


struct  BFu16s_BFu1s_BFu15i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu1s_BFu15i) C1{ Fs:16 Fs:1 Fi:15}



static void Test_BFu16s_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu15i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu15i, BFu16s_BFu1s_BFu15i)
//============================================================================


struct  BFu16s_BFu1s_BFu15ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu1s_BFu15ll) C1{ Fs:16 Fs:1 FL:15}



static void Test_BFu16s_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu15ll, BFu16s_BFu1s_BFu15ll)
//============================================================================


struct  BFu16s_BFu1s_BFu15s  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu1s_BFu15s) C1{ Fs:16 Fs:1 Fs:15}



static void Test_BFu16s_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu15s");
    static STRUCT_IF_C BFu16s_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu16s_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu15s, BFu16s_BFu1s_BFu15s)
//============================================================================


struct  BFu16s_BFu1s_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu1s_BFu16i) C1{ Fs:16 Fs:1 Fi:16}



static void Test_BFu16s_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu16i, BFu16s_BFu1s_BFu16i)
//============================================================================


struct  BFu16s_BFu1s_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu1s_BFu16ll) C1{ Fs:16 Fs:1 FL:16}



static void Test_BFu16s_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "BFu16s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu16ll, BFu16s_BFu1s_BFu16ll)
//============================================================================


struct  BFu16s_BFu1s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu1s_BFu16s) C1{ Fs:16 Fs:1 Fs:16}



static void Test_BFu16s_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu1s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu16s, BFu16s_BFu1s_BFu16s)
//============================================================================


struct  BFu16s_BFu1s_BFu17i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu1s_BFu17i) C1{ Fs:16 Fs:1 Fi:17}



static void Test_BFu16s_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu17i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu17i, BFu16s_BFu1s_BFu17i)
//============================================================================


struct  BFu16s_BFu1s_BFu17ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu1s_BFu17ll) C1{ Fs:16 Fs:1 FL:17}



static void Test_BFu16s_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "BFu16s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu17ll, BFu16s_BFu1s_BFu17ll)
//============================================================================


struct  BFu16s_BFu1s_BFu1c  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu1s_BFu1c) C1{ Fs:16 Fs:1 Fc:1}



static void Test_BFu16s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu1c");
    static STRUCT_IF_C BFu16s_BFu1s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu1c, BFu16s_BFu1s_BFu1c)
//============================================================================


struct  BFu16s_BFu1s_BFu1i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu1s_BFu1i) C1{ Fs:16 Fs:1 Fi:1}



static void Test_BFu16s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu1i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu1i, BFu16s_BFu1s_BFu1i)
//============================================================================


struct  BFu16s_BFu1s_BFu1ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu1s_BFu1ll) C1{ Fs:16 Fs:1 FL:1}



static void Test_BFu16s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu1ll, BFu16s_BFu1s_BFu1ll)
//============================================================================


struct  BFu16s_BFu1s_BFu1s  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu1s_BFu1s) C1{ Fs:16 Fs:1 Fs:1}



static void Test_BFu16s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu1s");
    static STRUCT_IF_C BFu16s_BFu1s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu16s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu1s, BFu16s_BFu1s_BFu1s)
//============================================================================


struct  BFu16s_BFu1s_BFu31i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu1s_BFu31i) C1{ Fs:16 Fs:1 Fi:31}



static void Test_BFu16s_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu31i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu31i, BFu16s_BFu1s_BFu31i)
//============================================================================


struct  BFu16s_BFu1s_BFu31ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu1s_BFu31ll) C1{ Fs:16 Fs:1 FL:31}



static void Test_BFu16s_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "BFu16s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu31ll, BFu16s_BFu1s_BFu31ll)
//============================================================================


struct  BFu16s_BFu1s_BFu32i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu1s_BFu32i) C1{ Fs:16 Fs:1 Fi:32}



static void Test_BFu16s_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu32i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu32i, BFu16s_BFu1s_BFu32i)
//============================================================================


struct  BFu16s_BFu1s_BFu32ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu1s_BFu32ll) C1{ Fs:16 Fs:1 FL:32}



static void Test_BFu16s_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "BFu16s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "BFu16s_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu32ll, BFu16s_BFu1s_BFu32ll)
//============================================================================


struct  BFu16s_BFu1s_BFu33  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu1s_BFu33) C1{ Fs:16 Fs:1 FL:33}



static void Test_BFu16s_BFu1s_BFu33()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu33");
    static STRUCT_IF_C BFu16s_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "BFu16s_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "BFu16s_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu33, BFu16s_BFu1s_BFu33)
//============================================================================


struct  BFu16s_BFu1s_BFu7c  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu1s_BFu7c) C1{ Fs:16 Fs:1 Fc:7}



static void Test_BFu16s_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu7c");
    static STRUCT_IF_C BFu16s_BFu1s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu7c, BFu16s_BFu1s_BFu7c)
//============================================================================


struct  BFu16s_BFu1s_BFu7i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu1s_BFu7i) C1{ Fs:16 Fs:1 Fi:7}



static void Test_BFu16s_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu7i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu7i, BFu16s_BFu1s_BFu7i)
//============================================================================


struct  BFu16s_BFu1s_BFu7ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu1s_BFu7ll) C1{ Fs:16 Fs:1 FL:7}



static void Test_BFu16s_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu7ll, BFu16s_BFu1s_BFu7ll)
//============================================================================


struct  BFu16s_BFu1s_BFu7s  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu1s_BFu7s) C1{ Fs:16 Fs:1 Fs:7}



static void Test_BFu16s_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu7s");
    static STRUCT_IF_C BFu16s_BFu1s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu16s_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu7s, BFu16s_BFu1s_BFu7s)
//============================================================================


struct  BFu16s_BFu1s_BFu8c  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu1s_BFu8c) C1{ Fs:16 Fs:1 Fc:8}



static void Test_BFu16s_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu8c");
    static STRUCT_IF_C BFu16s_BFu1s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu8c, BFu16s_BFu1s_BFu8c)
//============================================================================


struct  BFu16s_BFu1s_BFu8i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu1s_BFu8i) C1{ Fs:16 Fs:1 Fi:8}



static void Test_BFu16s_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu8i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu8i, BFu16s_BFu1s_BFu8i)
//============================================================================


struct  BFu16s_BFu1s_BFu8ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu1s_BFu8ll) C1{ Fs:16 Fs:1 FL:8}



static void Test_BFu16s_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu8ll, BFu16s_BFu1s_BFu8ll)
//============================================================================


struct  BFu16s_BFu1s_BFu8s  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu1s_BFu8s) C1{ Fs:16 Fs:1 Fs:8}



static void Test_BFu16s_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu8s");
    static STRUCT_IF_C BFu16s_BFu1s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu16s_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu8s, BFu16s_BFu1s_BFu8s)
//============================================================================


struct  BFu16s_BFu1s_BFu9i  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu1s_BFu9i) C1{ Fs:16 Fs:1 Fi:9}



static void Test_BFu16s_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu9i");
    static STRUCT_IF_C BFu16s_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu9i, BFu16s_BFu1s_BFu9i)
//============================================================================


struct  BFu16s_BFu1s_BFu9ll  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu1s_BFu9ll) C1{ Fs:16 Fs:1 FL:9}



static void Test_BFu16s_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu9ll, BFu16s_BFu1s_BFu9ll)
//============================================================================


struct  BFu16s_BFu1s_BFu9s  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu1s_BFu9s) C1{ Fs:16 Fs:1 Fs:9}



static void Test_BFu16s_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu1s_BFu9s");
    static STRUCT_IF_C BFu16s_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu16s_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_BFu9s, BFu16s_BFu1s_BFu9s)
//============================================================================


struct  BFu16s_BFu1s_C  {
  unsigned short v1:16;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu16s_BFu1s_C) C1{ Fs:16 Fs:1 Fc}



static void Test_BFu16s_BFu1s_C()
{
  {
    init_simple_test("BFu16s_BFu1s_C");
    static STRUCT_IF_C BFu16s_BFu1s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_C");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_C, BFu16s_BFu1s_C)
//============================================================================


struct  BFu16s_BFu1s_D  {
  unsigned short v1:16;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu16s_BFu1s_D) C1{ Fs:16 Fs:1 FL}



static void Test_BFu16s_BFu1s_D()
{
  {
    init_simple_test("BFu16s_BFu1s_D");
    static STRUCT_IF_C BFu16s_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_D");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_D, BFu16s_BFu1s_D)
//============================================================================


struct  BFu16s_BFu1s_F  {
  unsigned short v1:16;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu16s_BFu1s_F) C1{ Fs:16 Fs:1 Fi}



static void Test_BFu16s_BFu1s_F()
{
  {
    init_simple_test("BFu16s_BFu1s_F");
    static STRUCT_IF_C BFu16s_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_F");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_F, BFu16s_BFu1s_F)
//============================================================================


struct  BFu16s_BFu1s_I  {
  unsigned short v1:16;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu16s_BFu1s_I) C1{ Fs:16 Fs:1 Fi}



static void Test_BFu16s_BFu1s_I()
{
  {
    init_simple_test("BFu16s_BFu1s_I");
    static STRUCT_IF_C BFu16s_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_I");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_I, BFu16s_BFu1s_I)
//============================================================================


struct  BFu16s_BFu1s_Ip  {
  unsigned short v1:16;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu16s_BFu1s_Ip) C1{ Fs:16 Fs:1 Fp}



static void Test_BFu16s_BFu1s_Ip()
{
  {
    init_simple_test("BFu16s_BFu1s_Ip");
    static STRUCT_IF_C BFu16s_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_Ip, BFu16s_BFu1s_Ip)
//============================================================================


struct  BFu16s_BFu1s_L  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu1s_L) C1{ Fs:16 Fs:1 FL}



static void Test_BFu16s_BFu1s_L()
{
  {
    init_simple_test("BFu16s_BFu1s_L");
    static STRUCT_IF_C BFu16s_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_L");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_L, BFu16s_BFu1s_L)
//============================================================================


struct  BFu16s_BFu1s_S  {
  unsigned short v1:16;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu16s_BFu1s_S) C1{ Fs:16 Fs:1 Fs}



static void Test_BFu16s_BFu1s_S()
{
  {
    init_simple_test("BFu16s_BFu1s_S");
    static STRUCT_IF_C BFu16s_BFu1s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_S");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_S, BFu16s_BFu1s_S)
//============================================================================


struct  BFu16s_BFu1s_Uc  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu1s_Uc) C1{ Fs:16 Fs:1 Fc}



static void Test_BFu16s_BFu1s_Uc()
{
  {
    init_simple_test("BFu16s_BFu1s_Uc");
    static STRUCT_IF_C BFu16s_BFu1s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_Uc, BFu16s_BFu1s_Uc)
//============================================================================


struct  BFu16s_BFu1s_Ui  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu1s_Ui) C1{ Fs:16 Fs:1 Fi}



static void Test_BFu16s_BFu1s_Ui()
{
  {
    init_simple_test("BFu16s_BFu1s_Ui");
    static STRUCT_IF_C BFu16s_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_Ui, BFu16s_BFu1s_Ui)
//============================================================================


struct  BFu16s_BFu1s_Ul  {
  unsigned short v1:16;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu1s_Ul) C1{ Fs:16 Fs:1 FL}



static void Test_BFu16s_BFu1s_Ul()
{
  {
    init_simple_test("BFu16s_BFu1s_Ul");
    static STRUCT_IF_C BFu16s_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_Ul, BFu16s_BFu1s_Ul)
//============================================================================


struct  BFu16s_BFu1s_Us  {
  unsigned short v1:16;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu1s_Us) C1{ Fs:16 Fs:1 Fs}



static void Test_BFu16s_BFu1s_Us()
{
  {
    init_simple_test("BFu16s_BFu1s_Us");
    static STRUCT_IF_C BFu16s_BFu1s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_Us");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_Us, BFu16s_BFu1s_Us)
//============================================================================


struct  BFu16s_BFu1s_Vp  {
  unsigned short v1:16;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu16s_BFu1s_Vp) C1{ Fs:16 Fs:1 Fp}



static void Test_BFu16s_BFu1s_Vp()
{
  {
    init_simple_test("BFu16s_BFu1s_Vp");
    static STRUCT_IF_C BFu16s_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu1s_Vp, BFu16s_BFu1s_Vp)
//============================================================================


struct  BFu16s_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu16s_BFu31i) C1{ Fs:16 Fi:31}



static void Test_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu31i");
    static STRUCT_IF_C BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i, BFu16s_BFu31i)
//============================================================================


struct  BFu16s_BFu31i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu31i_BFu15i) C1{ Fs:16 Fi:31 Fi:15}



static void Test_BFu16s_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu15i, BFu16s_BFu31i_BFu15i)
//============================================================================


struct  BFu16s_BFu31i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu31i_BFu15ll) C1{ Fs:16 Fi:31 FL:15}



static void Test_BFu16s_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu16s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu16s_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu15ll, BFu16s_BFu31i_BFu15ll)
//============================================================================


struct  BFu16s_BFu31i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu31i_BFu15s) C1{ Fs:16 Fi:31 Fs:15}



static void Test_BFu16s_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu15s, BFu16s_BFu31i_BFu15s)
//============================================================================


struct  BFu16s_BFu31i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu31i_BFu16i) C1{ Fs:16 Fi:31 Fi:16}



static void Test_BFu16s_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu16i, BFu16s_BFu31i_BFu16i)
//============================================================================


struct  BFu16s_BFu31i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu31i_BFu16ll) C1{ Fs:16 Fi:31 FL:16}



static void Test_BFu16s_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu16s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu16ll, BFu16s_BFu31i_BFu16ll)
//============================================================================


struct  BFu16s_BFu31i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu31i_BFu16s) C1{ Fs:16 Fi:31 Fs:16}



static void Test_BFu16s_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu16s, BFu16s_BFu31i_BFu16s)
//============================================================================


struct  BFu16s_BFu31i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu31i_BFu17i) C1{ Fs:16 Fi:31 Fi:17}



static void Test_BFu16s_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu17i, BFu16s_BFu31i_BFu17i)
//============================================================================


struct  BFu16s_BFu31i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu31i_BFu17ll) C1{ Fs:16 Fi:31 FL:17}



static void Test_BFu16s_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu16s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu16s_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu17ll, BFu16s_BFu31i_BFu17ll)
//============================================================================


struct  BFu16s_BFu31i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu31i_BFu1c) C1{ Fs:16 Fi:31 Fc:1}



static void Test_BFu16s_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu16s_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu1c, BFu16s_BFu31i_BFu1c)
//============================================================================


struct  BFu16s_BFu31i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu31i_BFu1i) C1{ Fs:16 Fi:31 Fi:1}



static void Test_BFu16s_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu16s_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu1i, BFu16s_BFu31i_BFu1i)
//============================================================================


struct  BFu16s_BFu31i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu31i_BFu1ll) C1{ Fs:16 Fi:31 FL:1}



static void Test_BFu16s_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu16s_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu1ll, BFu16s_BFu31i_BFu1ll)
//============================================================================


struct  BFu16s_BFu31i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu31i_BFu1s) C1{ Fs:16 Fi:31 Fs:1}



static void Test_BFu16s_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu16s_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu1s, BFu16s_BFu31i_BFu1s)
//============================================================================


struct  BFu16s_BFu31i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu31i_BFu31i) C1{ Fs:16 Fi:31 Fi:31}



static void Test_BFu16s_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu31i, BFu16s_BFu31i_BFu31i)
//============================================================================


struct  BFu16s_BFu31i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu31i_BFu31ll) C1{ Fs:16 Fi:31 FL:31}



static void Test_BFu16s_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu16s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu31ll, BFu16s_BFu31i_BFu31ll)
//============================================================================


struct  BFu16s_BFu31i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu31i_BFu32i) C1{ Fs:16 Fi:31 Fi:32}



static void Test_BFu16s_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu32i, BFu16s_BFu31i_BFu32i)
//============================================================================


struct  BFu16s_BFu31i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu31i_BFu32ll) C1{ Fs:16 Fi:31 FL:32}



static void Test_BFu16s_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu16s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu16s_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu32ll, BFu16s_BFu31i_BFu32ll)
//============================================================================


struct  BFu16s_BFu31i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu31i_BFu33) C1{ Fs:16 Fi:31 FL:33}



static void Test_BFu16s_BFu31i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu33");
    static STRUCT_IF_C BFu16s_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu16s_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu16s_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu33, BFu16s_BFu31i_BFu33)
//============================================================================


struct  BFu16s_BFu31i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu31i_BFu7c) C1{ Fs:16 Fi:31 Fc:7}



static void Test_BFu16s_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu7c, BFu16s_BFu31i_BFu7c)
//============================================================================


struct  BFu16s_BFu31i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu31i_BFu7i) C1{ Fs:16 Fi:31 Fi:7}



static void Test_BFu16s_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu7i, BFu16s_BFu31i_BFu7i)
//============================================================================


struct  BFu16s_BFu31i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu31i_BFu7ll) C1{ Fs:16 Fi:31 FL:7}



static void Test_BFu16s_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu16s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu16s_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu7ll, BFu16s_BFu31i_BFu7ll)
//============================================================================


struct  BFu16s_BFu31i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu31i_BFu7s) C1{ Fs:16 Fi:31 Fs:7}



static void Test_BFu16s_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu7s, BFu16s_BFu31i_BFu7s)
//============================================================================


struct  BFu16s_BFu31i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu31i_BFu8c) C1{ Fs:16 Fi:31 Fc:8}



static void Test_BFu16s_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu8c, BFu16s_BFu31i_BFu8c)
//============================================================================


struct  BFu16s_BFu31i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu31i_BFu8i) C1{ Fs:16 Fi:31 Fi:8}



static void Test_BFu16s_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu8i, BFu16s_BFu31i_BFu8i)
//============================================================================


struct  BFu16s_BFu31i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu31i_BFu8ll) C1{ Fs:16 Fi:31 FL:8}



static void Test_BFu16s_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu16s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu16s_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu8ll, BFu16s_BFu31i_BFu8ll)
//============================================================================


struct  BFu16s_BFu31i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu31i_BFu8s) C1{ Fs:16 Fi:31 Fs:8}



static void Test_BFu16s_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu8s, BFu16s_BFu31i_BFu8s)
//============================================================================


struct  BFu16s_BFu31i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu31i_BFu9i) C1{ Fs:16 Fi:31 Fi:9}



static void Test_BFu16s_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu9i, BFu16s_BFu31i_BFu9i)
//============================================================================


struct  BFu16s_BFu31i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu31i_BFu9ll) C1{ Fs:16 Fi:31 FL:9}



static void Test_BFu16s_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu16s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu16s_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu9ll, BFu16s_BFu31i_BFu9ll)
//============================================================================


struct  BFu16s_BFu31i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu31i_BFu9s) C1{ Fs:16 Fi:31 Fs:9}



static void Test_BFu16s_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu31i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_BFu9s, BFu16s_BFu31i_BFu9s)
//============================================================================


struct  BFu16s_BFu31i_C  {
  unsigned short v1:16;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu16s_BFu31i_C) C1{ Fs:16 Fi:31 Fc}



static void Test_BFu16s_BFu31i_C()
{
  {
    init_simple_test("BFu16s_BFu31i_C");
    static STRUCT_IF_C BFu16s_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_C, BFu16s_BFu31i_C)
//============================================================================


struct  BFu16s_BFu31i_D  {
  unsigned short v1:16;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu16s_BFu31i_D) C1{ Fs:16 Fi:31 FL}



static void Test_BFu16s_BFu31i_D()
{
  {
    init_simple_test("BFu16s_BFu31i_D");
    static STRUCT_IF_C BFu16s_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_D, BFu16s_BFu31i_D)
//============================================================================


struct  BFu16s_BFu31i_F  {
  unsigned short v1:16;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu16s_BFu31i_F) C1{ Fs:16 Fi:31 Fi}



static void Test_BFu16s_BFu31i_F()
{
  {
    init_simple_test("BFu16s_BFu31i_F");
    static STRUCT_IF_C BFu16s_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_F, BFu16s_BFu31i_F)
//============================================================================


struct  BFu16s_BFu31i_I  {
  unsigned short v1:16;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu16s_BFu31i_I) C1{ Fs:16 Fi:31 Fi}



static void Test_BFu16s_BFu31i_I()
{
  {
    init_simple_test("BFu16s_BFu31i_I");
    static STRUCT_IF_C BFu16s_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_I, BFu16s_BFu31i_I)
//============================================================================


struct  BFu16s_BFu31i_Ip  {
  unsigned short v1:16;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu16s_BFu31i_Ip) C1{ Fs:16 Fi:31 Fp}



static void Test_BFu16s_BFu31i_Ip()
{
  {
    init_simple_test("BFu16s_BFu31i_Ip");
    static STRUCT_IF_C BFu16s_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_Ip, BFu16s_BFu31i_Ip)
//============================================================================


struct  BFu16s_BFu31i_L  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu31i_L) C1{ Fs:16 Fi:31 FL}



static void Test_BFu16s_BFu31i_L()
{
  {
    init_simple_test("BFu16s_BFu31i_L");
    static STRUCT_IF_C BFu16s_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_L, BFu16s_BFu31i_L)
//============================================================================


struct  BFu16s_BFu31i_S  {
  unsigned short v1:16;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu16s_BFu31i_S) C1{ Fs:16 Fi:31 Fs}



static void Test_BFu16s_BFu31i_S()
{
  {
    init_simple_test("BFu16s_BFu31i_S");
    static STRUCT_IF_C BFu16s_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_S, BFu16s_BFu31i_S)
//============================================================================


struct  BFu16s_BFu31i_Uc  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu31i_Uc) C1{ Fs:16 Fi:31 Fc}



static void Test_BFu16s_BFu31i_Uc()
{
  {
    init_simple_test("BFu16s_BFu31i_Uc");
    static STRUCT_IF_C BFu16s_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_Uc, BFu16s_BFu31i_Uc)
//============================================================================


struct  BFu16s_BFu31i_Ui  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu31i_Ui) C1{ Fs:16 Fi:31 Fi}



static void Test_BFu16s_BFu31i_Ui()
{
  {
    init_simple_test("BFu16s_BFu31i_Ui");
    static STRUCT_IF_C BFu16s_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_Ui, BFu16s_BFu31i_Ui)
//============================================================================


struct  BFu16s_BFu31i_Ul  {
  unsigned short v1:16;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu31i_Ul) C1{ Fs:16 Fi:31 FL}



static void Test_BFu16s_BFu31i_Ul()
{
  {
    init_simple_test("BFu16s_BFu31i_Ul");
    static STRUCT_IF_C BFu16s_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_Ul, BFu16s_BFu31i_Ul)
//============================================================================


struct  BFu16s_BFu31i_Us  {
  unsigned short v1:16;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu31i_Us) C1{ Fs:16 Fi:31 Fs}



static void Test_BFu16s_BFu31i_Us()
{
  {
    init_simple_test("BFu16s_BFu31i_Us");
    static STRUCT_IF_C BFu16s_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_Us, BFu16s_BFu31i_Us)
//============================================================================


struct  BFu16s_BFu31i_Vp  {
  unsigned short v1:16;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu16s_BFu31i_Vp) C1{ Fs:16 Fi:31 Fp}



static void Test_BFu16s_BFu31i_Vp()
{
  {
    init_simple_test("BFu16s_BFu31i_Vp");
    static STRUCT_IF_C BFu16s_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31i_Vp, BFu16s_BFu31i_Vp)
//============================================================================


struct  BFu16s_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu16s_BFu31ll) C1{ Fs:16 FL:31}



static void Test_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll, BFu16s_BFu31ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu31ll_BFu15i) C1{ Fs:16 FL:31 Fi:15}



static void Test_BFu16s_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu16s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu15i, BFu16s_BFu31ll_BFu15i)
//============================================================================


struct  BFu16s_BFu31ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu31ll_BFu15ll) C1{ Fs:16 FL:31 FL:15}



static void Test_BFu16s_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu16s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu15ll, BFu16s_BFu31ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu31ll_BFu15s) C1{ Fs:16 FL:31 Fs:15}



static void Test_BFu16s_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu16s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu15s, BFu16s_BFu31ll_BFu15s)
//============================================================================


struct  BFu16s_BFu31ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu31ll_BFu16i) C1{ Fs:16 FL:31 Fi:16}



static void Test_BFu16s_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu16s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu16i, BFu16s_BFu31ll_BFu16i)
//============================================================================


struct  BFu16s_BFu31ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu31ll_BFu16ll) C1{ Fs:16 FL:31 FL:16}



static void Test_BFu16s_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu16s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu16ll, BFu16s_BFu31ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu31ll_BFu16s) C1{ Fs:16 FL:31 Fs:16}



static void Test_BFu16s_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu16s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu16s, BFu16s_BFu31ll_BFu16s)
//============================================================================


struct  BFu16s_BFu31ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu31ll_BFu17i) C1{ Fs:16 FL:31 Fi:17}



static void Test_BFu16s_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu16s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu17i, BFu16s_BFu31ll_BFu17i)
//============================================================================


struct  BFu16s_BFu31ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu31ll_BFu17ll) C1{ Fs:16 FL:31 FL:17}



static void Test_BFu16s_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu16s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu17ll, BFu16s_BFu31ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu31ll_BFu1c) C1{ Fs:16 FL:31 Fc:1}



static void Test_BFu16s_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu16s_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu1c, BFu16s_BFu31ll_BFu1c)
//============================================================================


struct  BFu16s_BFu31ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu31ll_BFu1i) C1{ Fs:16 FL:31 Fi:1}



static void Test_BFu16s_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu16s_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu1i, BFu16s_BFu31ll_BFu1i)
//============================================================================


struct  BFu16s_BFu31ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu31ll_BFu1ll) C1{ Fs:16 FL:31 FL:1}



static void Test_BFu16s_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu16s_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu1ll, BFu16s_BFu31ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu31ll_BFu1s) C1{ Fs:16 FL:31 Fs:1}



static void Test_BFu16s_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu16s_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu1s, BFu16s_BFu31ll_BFu1s)
//============================================================================


struct  BFu16s_BFu31ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu31ll_BFu31i) C1{ Fs:16 FL:31 Fi:31}



static void Test_BFu16s_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu31i, BFu16s_BFu31ll_BFu31i)
//============================================================================


struct  BFu16s_BFu31ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu31ll_BFu31ll) C1{ Fs:16 FL:31 FL:31}



static void Test_BFu16s_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu16s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu31ll, BFu16s_BFu31ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu31ll_BFu32i) C1{ Fs:16 FL:31 Fi:32}



static void Test_BFu16s_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu32i, BFu16s_BFu31ll_BFu32i)
//============================================================================


struct  BFu16s_BFu31ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu31ll_BFu32ll) C1{ Fs:16 FL:31 FL:32}



static void Test_BFu16s_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu16s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu16s_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu32ll, BFu16s_BFu31ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu31ll_BFu33) C1{ Fs:16 FL:31 FL:33}



static void Test_BFu16s_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu16s_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu16s_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu33, BFu16s_BFu31ll_BFu33)
//============================================================================


struct  BFu16s_BFu31ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu31ll_BFu7c) C1{ Fs:16 FL:31 Fc:7}



static void Test_BFu16s_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu16s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu7c, BFu16s_BFu31ll_BFu7c)
//============================================================================


struct  BFu16s_BFu31ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu31ll_BFu7i) C1{ Fs:16 FL:31 Fi:7}



static void Test_BFu16s_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu16s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu7i, BFu16s_BFu31ll_BFu7i)
//============================================================================


struct  BFu16s_BFu31ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu31ll_BFu7ll) C1{ Fs:16 FL:31 FL:7}



static void Test_BFu16s_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu16s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu7ll, BFu16s_BFu31ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu31ll_BFu7s) C1{ Fs:16 FL:31 Fs:7}



static void Test_BFu16s_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu16s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu7s, BFu16s_BFu31ll_BFu7s)
//============================================================================


struct  BFu16s_BFu31ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu31ll_BFu8c) C1{ Fs:16 FL:31 Fc:8}



static void Test_BFu16s_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu16s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu8c, BFu16s_BFu31ll_BFu8c)
//============================================================================


struct  BFu16s_BFu31ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu31ll_BFu8i) C1{ Fs:16 FL:31 Fi:8}



static void Test_BFu16s_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu16s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu8i, BFu16s_BFu31ll_BFu8i)
//============================================================================


struct  BFu16s_BFu31ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu31ll_BFu8ll) C1{ Fs:16 FL:31 FL:8}



static void Test_BFu16s_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu16s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu8ll, BFu16s_BFu31ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu31ll_BFu8s) C1{ Fs:16 FL:31 Fs:8}



static void Test_BFu16s_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu16s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu8s, BFu16s_BFu31ll_BFu8s)
//============================================================================


struct  BFu16s_BFu31ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu31ll_BFu9i) C1{ Fs:16 FL:31 Fi:9}



static void Test_BFu16s_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu16s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu9i, BFu16s_BFu31ll_BFu9i)
//============================================================================


struct  BFu16s_BFu31ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu31ll_BFu9ll) C1{ Fs:16 FL:31 FL:9}



static void Test_BFu16s_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu16s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu9ll, BFu16s_BFu31ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu31ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu31ll_BFu9s) C1{ Fs:16 FL:31 Fs:9}



static void Test_BFu16s_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu16s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_BFu9s, BFu16s_BFu31ll_BFu9s)
//============================================================================


struct  BFu16s_BFu31ll_C  {
  unsigned short v1:16;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu16s_BFu31ll_C) C1{ Fs:16 FL:31 Fc}



static void Test_BFu16s_BFu31ll_C()
{
  {
    init_simple_test("BFu16s_BFu31ll_C");
    static STRUCT_IF_C BFu16s_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_C");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_C");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_C");
    check_field_offset(lv, v3, 6, "BFu16s_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_C, BFu16s_BFu31ll_C)
//============================================================================


struct  BFu16s_BFu31ll_D  {
  unsigned short v1:16;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu16s_BFu31ll_D) C1{ Fs:16 FL:31 FL}



static void Test_BFu16s_BFu31ll_D()
{
  {
    init_simple_test("BFu16s_BFu31ll_D");
    static STRUCT_IF_C BFu16s_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_D");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_D");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_D, BFu16s_BFu31ll_D)
//============================================================================


struct  BFu16s_BFu31ll_F  {
  unsigned short v1:16;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu16s_BFu31ll_F) C1{ Fs:16 FL:31 Fi}



static void Test_BFu16s_BFu31ll_F()
{
  {
    init_simple_test("BFu16s_BFu31ll_F");
    static STRUCT_IF_C BFu16s_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_F");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_F");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_F, BFu16s_BFu31ll_F)
//============================================================================


struct  BFu16s_BFu31ll_I  {
  unsigned short v1:16;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu16s_BFu31ll_I) C1{ Fs:16 FL:31 Fi}



static void Test_BFu16s_BFu31ll_I()
{
  {
    init_simple_test("BFu16s_BFu31ll_I");
    static STRUCT_IF_C BFu16s_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_I");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_I");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_I, BFu16s_BFu31ll_I)
//============================================================================


struct  BFu16s_BFu31ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu16s_BFu31ll_Ip) C1{ Fs:16 FL:31 Fp}



static void Test_BFu16s_BFu31ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu31ll_Ip");
    static STRUCT_IF_C BFu16s_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_Ip, BFu16s_BFu31ll_Ip)
//============================================================================


struct  BFu16s_BFu31ll_L  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu31ll_L) C1{ Fs:16 FL:31 FL}



static void Test_BFu16s_BFu31ll_L()
{
  {
    init_simple_test("BFu16s_BFu31ll_L");
    static STRUCT_IF_C BFu16s_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_L");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_L");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_L, BFu16s_BFu31ll_L)
//============================================================================


struct  BFu16s_BFu31ll_S  {
  unsigned short v1:16;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu16s_BFu31ll_S) C1{ Fs:16 FL:31 Fs}



static void Test_BFu16s_BFu31ll_S()
{
  {
    init_simple_test("BFu16s_BFu31ll_S");
    static STRUCT_IF_C BFu16s_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_S");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_S");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu16s_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_S, BFu16s_BFu31ll_S)
//============================================================================


struct  BFu16s_BFu31ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu31ll_Uc) C1{ Fs:16 FL:31 Fc}



static void Test_BFu16s_BFu31ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu31ll_Uc");
    static STRUCT_IF_C BFu16s_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_Uc");
    check_field_offset(lv, v3, 6, "BFu16s_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_Uc, BFu16s_BFu31ll_Uc)
//============================================================================


struct  BFu16s_BFu31ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu31ll_Ui) C1{ Fs:16 FL:31 Fi}



static void Test_BFu16s_BFu31ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu31ll_Ui");
    static STRUCT_IF_C BFu16s_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_Ui, BFu16s_BFu31ll_Ui)
//============================================================================


struct  BFu16s_BFu31ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu31ll_Ul) C1{ Fs:16 FL:31 FL}



static void Test_BFu16s_BFu31ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu31ll_Ul");
    static STRUCT_IF_C BFu16s_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_Ul, BFu16s_BFu31ll_Ul)
//============================================================================


struct  BFu16s_BFu31ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu31ll_Us) C1{ Fs:16 FL:31 Fs}



static void Test_BFu16s_BFu31ll_Us()
{
  {
    init_simple_test("BFu16s_BFu31ll_Us");
    static STRUCT_IF_C BFu16s_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu16s_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_Us, BFu16s_BFu31ll_Us)
//============================================================================


struct  BFu16s_BFu31ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu16s_BFu31ll_Vp) C1{ Fs:16 FL:31 Fp}



static void Test_BFu16s_BFu31ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu31ll_Vp");
    static STRUCT_IF_C BFu16s_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu31ll_Vp, BFu16s_BFu31ll_Vp)
//============================================================================


struct  BFu16s_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu16s_BFu32i) C1{ Fs:16 Fi:32}



static void Test_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu32i");
    static STRUCT_IF_C BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i, BFu16s_BFu32i)
//============================================================================


struct  BFu16s_BFu32i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu32i_BFu15i) C1{ Fs:16 Fi:32 Fi:15}



static void Test_BFu16s_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu15i, BFu16s_BFu32i_BFu15i)
//============================================================================


struct  BFu16s_BFu32i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu32i_BFu15ll) C1{ Fs:16 Fi:32 FL:15}



static void Test_BFu16s_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu15ll, BFu16s_BFu32i_BFu15ll)
//============================================================================


struct  BFu16s_BFu32i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu32i_BFu15s) C1{ Fs:16 Fi:32 Fs:15}



static void Test_BFu16s_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu15s, BFu16s_BFu32i_BFu15s)
//============================================================================


struct  BFu16s_BFu32i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu32i_BFu16i) C1{ Fs:16 Fi:32 Fi:16}



static void Test_BFu16s_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu16i, BFu16s_BFu32i_BFu16i)
//============================================================================


struct  BFu16s_BFu32i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu32i_BFu16ll) C1{ Fs:16 Fi:32 FL:16}



static void Test_BFu16s_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu16ll, BFu16s_BFu32i_BFu16ll)
//============================================================================


struct  BFu16s_BFu32i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu32i_BFu16s) C1{ Fs:16 Fi:32 Fs:16}



static void Test_BFu16s_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu16s, BFu16s_BFu32i_BFu16s)
//============================================================================


struct  BFu16s_BFu32i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu32i_BFu17i) C1{ Fs:16 Fi:32 Fi:17}



static void Test_BFu16s_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu17i, BFu16s_BFu32i_BFu17i)
//============================================================================


struct  BFu16s_BFu32i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu32i_BFu17ll) C1{ Fs:16 Fi:32 FL:17}



static void Test_BFu16s_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu17ll, BFu16s_BFu32i_BFu17ll)
//============================================================================


struct  BFu16s_BFu32i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu32i_BFu1c) C1{ Fs:16 Fi:32 Fc:1}



static void Test_BFu16s_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu1c, BFu16s_BFu32i_BFu1c)
//============================================================================


struct  BFu16s_BFu32i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu32i_BFu1i) C1{ Fs:16 Fi:32 Fi:1}



static void Test_BFu16s_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu1i, BFu16s_BFu32i_BFu1i)
//============================================================================


struct  BFu16s_BFu32i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu32i_BFu1ll) C1{ Fs:16 Fi:32 FL:1}



static void Test_BFu16s_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu1ll, BFu16s_BFu32i_BFu1ll)
//============================================================================


struct  BFu16s_BFu32i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu32i_BFu1s) C1{ Fs:16 Fi:32 Fs:1}



static void Test_BFu16s_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu1s, BFu16s_BFu32i_BFu1s)
//============================================================================


struct  BFu16s_BFu32i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu32i_BFu31i) C1{ Fs:16 Fi:32 Fi:31}



static void Test_BFu16s_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu31i, BFu16s_BFu32i_BFu31i)
//============================================================================


struct  BFu16s_BFu32i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu32i_BFu31ll) C1{ Fs:16 Fi:32 FL:31}



static void Test_BFu16s_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu31ll, BFu16s_BFu32i_BFu31ll)
//============================================================================


struct  BFu16s_BFu32i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu32i_BFu32i) C1{ Fs:16 Fi:32 Fi:32}



static void Test_BFu16s_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu32i, BFu16s_BFu32i_BFu32i)
//============================================================================


struct  BFu16s_BFu32i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu32i_BFu32ll) C1{ Fs:16 Fi:32 FL:32}



static void Test_BFu16s_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu32ll, BFu16s_BFu32i_BFu32ll)
//============================================================================


struct  BFu16s_BFu32i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu32i_BFu33) C1{ Fs:16 Fi:32 FL:33}



static void Test_BFu16s_BFu32i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu33");
    static STRUCT_IF_C BFu16s_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu16s_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu33, BFu16s_BFu32i_BFu33)
//============================================================================


struct  BFu16s_BFu32i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu32i_BFu7c) C1{ Fs:16 Fi:32 Fc:7}



static void Test_BFu16s_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu7c, BFu16s_BFu32i_BFu7c)
//============================================================================


struct  BFu16s_BFu32i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu32i_BFu7i) C1{ Fs:16 Fi:32 Fi:7}



static void Test_BFu16s_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu7i, BFu16s_BFu32i_BFu7i)
//============================================================================


struct  BFu16s_BFu32i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu32i_BFu7ll) C1{ Fs:16 Fi:32 FL:7}



static void Test_BFu16s_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu7ll, BFu16s_BFu32i_BFu7ll)
//============================================================================


struct  BFu16s_BFu32i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu32i_BFu7s) C1{ Fs:16 Fi:32 Fs:7}



static void Test_BFu16s_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu7s, BFu16s_BFu32i_BFu7s)
//============================================================================


struct  BFu16s_BFu32i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu32i_BFu8c) C1{ Fs:16 Fi:32 Fc:8}



static void Test_BFu16s_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu8c, BFu16s_BFu32i_BFu8c)
//============================================================================


struct  BFu16s_BFu32i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu32i_BFu8i) C1{ Fs:16 Fi:32 Fi:8}



static void Test_BFu16s_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu8i, BFu16s_BFu32i_BFu8i)
//============================================================================


struct  BFu16s_BFu32i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu32i_BFu8ll) C1{ Fs:16 Fi:32 FL:8}



static void Test_BFu16s_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu8ll, BFu16s_BFu32i_BFu8ll)
//============================================================================


struct  BFu16s_BFu32i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu32i_BFu8s) C1{ Fs:16 Fi:32 Fs:8}



static void Test_BFu16s_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu8s, BFu16s_BFu32i_BFu8s)
//============================================================================


struct  BFu16s_BFu32i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu32i_BFu9i) C1{ Fs:16 Fi:32 Fi:9}



static void Test_BFu16s_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu9i, BFu16s_BFu32i_BFu9i)
//============================================================================


struct  BFu16s_BFu32i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu32i_BFu9ll) C1{ Fs:16 Fi:32 FL:9}



static void Test_BFu16s_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu9ll, BFu16s_BFu32i_BFu9ll)
//============================================================================


struct  BFu16s_BFu32i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu32i_BFu9s) C1{ Fs:16 Fi:32 Fs:9}



static void Test_BFu16s_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu32i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_BFu9s, BFu16s_BFu32i_BFu9s)
//============================================================================


struct  BFu16s_BFu32i_C  {
  unsigned short v1:16;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu16s_BFu32i_C) C1{ Fs:16 Fi:32 Fc}



static void Test_BFu16s_BFu32i_C()
{
  {
    init_simple_test("BFu16s_BFu32i_C");
    static STRUCT_IF_C BFu16s_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_C, BFu16s_BFu32i_C)
//============================================================================


struct  BFu16s_BFu32i_D  {
  unsigned short v1:16;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu16s_BFu32i_D) C1{ Fs:16 Fi:32 FL}



static void Test_BFu16s_BFu32i_D()
{
  {
    init_simple_test("BFu16s_BFu32i_D");
    static STRUCT_IF_C BFu16s_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_D, BFu16s_BFu32i_D)
//============================================================================


struct  BFu16s_BFu32i_F  {
  unsigned short v1:16;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu16s_BFu32i_F) C1{ Fs:16 Fi:32 Fi}



static void Test_BFu16s_BFu32i_F()
{
  {
    init_simple_test("BFu16s_BFu32i_F");
    static STRUCT_IF_C BFu16s_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_F, BFu16s_BFu32i_F)
//============================================================================


struct  BFu16s_BFu32i_I  {
  unsigned short v1:16;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu16s_BFu32i_I) C1{ Fs:16 Fi:32 Fi}



static void Test_BFu16s_BFu32i_I()
{
  {
    init_simple_test("BFu16s_BFu32i_I");
    static STRUCT_IF_C BFu16s_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_I, BFu16s_BFu32i_I)
//============================================================================


struct  BFu16s_BFu32i_Ip  {
  unsigned short v1:16;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu16s_BFu32i_Ip) C1{ Fs:16 Fi:32 Fp}



static void Test_BFu16s_BFu32i_Ip()
{
  {
    init_simple_test("BFu16s_BFu32i_Ip");
    static STRUCT_IF_C BFu16s_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_Ip, BFu16s_BFu32i_Ip)
//============================================================================


struct  BFu16s_BFu32i_L  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu32i_L) C1{ Fs:16 Fi:32 FL}



static void Test_BFu16s_BFu32i_L()
{
  {
    init_simple_test("BFu16s_BFu32i_L");
    static STRUCT_IF_C BFu16s_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_L, BFu16s_BFu32i_L)
//============================================================================


struct  BFu16s_BFu32i_S  {
  unsigned short v1:16;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu16s_BFu32i_S) C1{ Fs:16 Fi:32 Fs}



static void Test_BFu16s_BFu32i_S()
{
  {
    init_simple_test("BFu16s_BFu32i_S");
    static STRUCT_IF_C BFu16s_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_S, BFu16s_BFu32i_S)
//============================================================================


struct  BFu16s_BFu32i_Uc  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu32i_Uc) C1{ Fs:16 Fi:32 Fc}



static void Test_BFu16s_BFu32i_Uc()
{
  {
    init_simple_test("BFu16s_BFu32i_Uc");
    static STRUCT_IF_C BFu16s_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_Uc, BFu16s_BFu32i_Uc)
//============================================================================


struct  BFu16s_BFu32i_Ui  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu32i_Ui) C1{ Fs:16 Fi:32 Fi}



static void Test_BFu16s_BFu32i_Ui()
{
  {
    init_simple_test("BFu16s_BFu32i_Ui");
    static STRUCT_IF_C BFu16s_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_Ui, BFu16s_BFu32i_Ui)
//============================================================================


struct  BFu16s_BFu32i_Ul  {
  unsigned short v1:16;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu32i_Ul) C1{ Fs:16 Fi:32 FL}



static void Test_BFu16s_BFu32i_Ul()
{
  {
    init_simple_test("BFu16s_BFu32i_Ul");
    static STRUCT_IF_C BFu16s_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_Ul, BFu16s_BFu32i_Ul)
//============================================================================


struct  BFu16s_BFu32i_Us  {
  unsigned short v1:16;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu32i_Us) C1{ Fs:16 Fi:32 Fs}



static void Test_BFu16s_BFu32i_Us()
{
  {
    init_simple_test("BFu16s_BFu32i_Us");
    static STRUCT_IF_C BFu16s_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_Us, BFu16s_BFu32i_Us)
//============================================================================


struct  BFu16s_BFu32i_Vp  {
  unsigned short v1:16;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu16s_BFu32i_Vp) C1{ Fs:16 Fi:32 Fp}



static void Test_BFu16s_BFu32i_Vp()
{
  {
    init_simple_test("BFu16s_BFu32i_Vp");
    static STRUCT_IF_C BFu16s_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32i_Vp, BFu16s_BFu32i_Vp)
//============================================================================


struct  BFu16s_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu16s_BFu32ll) C1{ Fs:16 FL:32}



static void Test_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll, BFu16s_BFu32ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu32ll_BFu15i) C1{ Fs:16 FL:32 Fi:15}



static void Test_BFu16s_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu16s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu15i, BFu16s_BFu32ll_BFu15i)
//============================================================================


struct  BFu16s_BFu32ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu32ll_BFu15ll) C1{ Fs:16 FL:32 FL:15}



static void Test_BFu16s_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu16s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu15ll, BFu16s_BFu32ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu32ll_BFu15s) C1{ Fs:16 FL:32 Fs:15}



static void Test_BFu16s_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu16s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu15s, BFu16s_BFu32ll_BFu15s)
//============================================================================


struct  BFu16s_BFu32ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu32ll_BFu16i) C1{ Fs:16 FL:32 Fi:16}



static void Test_BFu16s_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu16s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu16i, BFu16s_BFu32ll_BFu16i)
//============================================================================


struct  BFu16s_BFu32ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu32ll_BFu16ll) C1{ Fs:16 FL:32 FL:16}



static void Test_BFu16s_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu16s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu16ll, BFu16s_BFu32ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu32ll_BFu16s) C1{ Fs:16 FL:32 Fs:16}



static void Test_BFu16s_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu16s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu16s, BFu16s_BFu32ll_BFu16s)
//============================================================================


struct  BFu16s_BFu32ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu32ll_BFu17i) C1{ Fs:16 FL:32 Fi:17}



static void Test_BFu16s_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu17i, BFu16s_BFu32ll_BFu17i)
//============================================================================


struct  BFu16s_BFu32ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu32ll_BFu17ll) C1{ Fs:16 FL:32 FL:17}



static void Test_BFu16s_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu16s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu16s_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu17ll, BFu16s_BFu32ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu32ll_BFu1c) C1{ Fs:16 FL:32 Fc:1}



static void Test_BFu16s_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu16s_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu1c, BFu16s_BFu32ll_BFu1c)
//============================================================================


struct  BFu16s_BFu32ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu32ll_BFu1i) C1{ Fs:16 FL:32 Fi:1}



static void Test_BFu16s_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu16s_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu1i, BFu16s_BFu32ll_BFu1i)
//============================================================================


struct  BFu16s_BFu32ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu32ll_BFu1ll) C1{ Fs:16 FL:32 FL:1}



static void Test_BFu16s_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu16s_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu1ll, BFu16s_BFu32ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu32ll_BFu1s) C1{ Fs:16 FL:32 Fs:1}



static void Test_BFu16s_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu16s_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu1s, BFu16s_BFu32ll_BFu1s)
//============================================================================


struct  BFu16s_BFu32ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu32ll_BFu31i) C1{ Fs:16 FL:32 Fi:31}



static void Test_BFu16s_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu31i, BFu16s_BFu32ll_BFu31i)
//============================================================================


struct  BFu16s_BFu32ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu32ll_BFu31ll) C1{ Fs:16 FL:32 FL:31}



static void Test_BFu16s_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu16s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu16s_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu31ll, BFu16s_BFu32ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu32ll_BFu32i) C1{ Fs:16 FL:32 Fi:32}



static void Test_BFu16s_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu32i, BFu16s_BFu32ll_BFu32i)
//============================================================================


struct  BFu16s_BFu32ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu32ll_BFu32ll) C1{ Fs:16 FL:32 FL:32}



static void Test_BFu16s_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu16s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu32ll, BFu16s_BFu32ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu32ll_BFu33) C1{ Fs:16 FL:32 FL:33}



static void Test_BFu16s_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu16s_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu16s_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu33, BFu16s_BFu32ll_BFu33)
//============================================================================


struct  BFu16s_BFu32ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu32ll_BFu7c) C1{ Fs:16 FL:32 Fc:7}



static void Test_BFu16s_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu16s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu7c, BFu16s_BFu32ll_BFu7c)
//============================================================================


struct  BFu16s_BFu32ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu32ll_BFu7i) C1{ Fs:16 FL:32 Fi:7}



static void Test_BFu16s_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu16s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu7i, BFu16s_BFu32ll_BFu7i)
//============================================================================


struct  BFu16s_BFu32ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu32ll_BFu7ll) C1{ Fs:16 FL:32 FL:7}



static void Test_BFu16s_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu16s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu7ll, BFu16s_BFu32ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu32ll_BFu7s) C1{ Fs:16 FL:32 Fs:7}



static void Test_BFu16s_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu16s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu7s, BFu16s_BFu32ll_BFu7s)
//============================================================================


struct  BFu16s_BFu32ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu32ll_BFu8c) C1{ Fs:16 FL:32 Fc:8}



static void Test_BFu16s_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu16s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu8c, BFu16s_BFu32ll_BFu8c)
//============================================================================


struct  BFu16s_BFu32ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu32ll_BFu8i) C1{ Fs:16 FL:32 Fi:8}



static void Test_BFu16s_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu16s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu8i, BFu16s_BFu32ll_BFu8i)
//============================================================================


struct  BFu16s_BFu32ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu32ll_BFu8ll) C1{ Fs:16 FL:32 FL:8}



static void Test_BFu16s_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu16s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu8ll, BFu16s_BFu32ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu32ll_BFu8s) C1{ Fs:16 FL:32 Fs:8}



static void Test_BFu16s_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu16s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu8s, BFu16s_BFu32ll_BFu8s)
//============================================================================


struct  BFu16s_BFu32ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu32ll_BFu9i) C1{ Fs:16 FL:32 Fi:9}



static void Test_BFu16s_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu16s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu9i, BFu16s_BFu32ll_BFu9i)
//============================================================================


struct  BFu16s_BFu32ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu32ll_BFu9ll) C1{ Fs:16 FL:32 FL:9}



static void Test_BFu16s_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu16s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu9ll, BFu16s_BFu32ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu32ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu32ll_BFu9s) C1{ Fs:16 FL:32 Fs:9}



static void Test_BFu16s_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu16s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_BFu9s, BFu16s_BFu32ll_BFu9s)
//============================================================================


struct  BFu16s_BFu32ll_C  {
  unsigned short v1:16;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu16s_BFu32ll_C) C1{ Fs:16 FL:32 Fc}



static void Test_BFu16s_BFu32ll_C()
{
  {
    init_simple_test("BFu16s_BFu32ll_C");
    static STRUCT_IF_C BFu16s_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_C");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_C");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_C");
    check_field_offset(lv, v3, 6, "BFu16s_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_C, BFu16s_BFu32ll_C)
//============================================================================


struct  BFu16s_BFu32ll_D  {
  unsigned short v1:16;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu16s_BFu32ll_D) C1{ Fs:16 FL:32 FL}



static void Test_BFu16s_BFu32ll_D()
{
  {
    init_simple_test("BFu16s_BFu32ll_D");
    static STRUCT_IF_C BFu16s_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_D");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_D");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_D, BFu16s_BFu32ll_D)
//============================================================================


struct  BFu16s_BFu32ll_F  {
  unsigned short v1:16;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu16s_BFu32ll_F) C1{ Fs:16 FL:32 Fi}



static void Test_BFu16s_BFu32ll_F()
{
  {
    init_simple_test("BFu16s_BFu32ll_F");
    static STRUCT_IF_C BFu16s_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_F");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_F");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_F, BFu16s_BFu32ll_F)
//============================================================================


struct  BFu16s_BFu32ll_I  {
  unsigned short v1:16;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu16s_BFu32ll_I) C1{ Fs:16 FL:32 Fi}



static void Test_BFu16s_BFu32ll_I()
{
  {
    init_simple_test("BFu16s_BFu32ll_I");
    static STRUCT_IF_C BFu16s_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_I");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_I");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_I, BFu16s_BFu32ll_I)
//============================================================================


struct  BFu16s_BFu32ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu16s_BFu32ll_Ip) C1{ Fs:16 FL:32 Fp}



static void Test_BFu16s_BFu32ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu32ll_Ip");
    static STRUCT_IF_C BFu16s_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_Ip, BFu16s_BFu32ll_Ip)
//============================================================================


struct  BFu16s_BFu32ll_L  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu32ll_L) C1{ Fs:16 FL:32 FL}



static void Test_BFu16s_BFu32ll_L()
{
  {
    init_simple_test("BFu16s_BFu32ll_L");
    static STRUCT_IF_C BFu16s_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_L");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_L");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_L, BFu16s_BFu32ll_L)
//============================================================================


struct  BFu16s_BFu32ll_S  {
  unsigned short v1:16;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu16s_BFu32ll_S) C1{ Fs:16 FL:32 Fs}



static void Test_BFu16s_BFu32ll_S()
{
  {
    init_simple_test("BFu16s_BFu32ll_S");
    static STRUCT_IF_C BFu16s_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_S");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_S");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_S");
    check_field_offset(lv, v3, 6, "BFu16s_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_S, BFu16s_BFu32ll_S)
//============================================================================


struct  BFu16s_BFu32ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu32ll_Uc) C1{ Fs:16 FL:32 Fc}



static void Test_BFu16s_BFu32ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu32ll_Uc");
    static STRUCT_IF_C BFu16s_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_Uc");
    check_field_offset(lv, v3, 6, "BFu16s_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_Uc, BFu16s_BFu32ll_Uc)
//============================================================================


struct  BFu16s_BFu32ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu32ll_Ui) C1{ Fs:16 FL:32 Fi}



static void Test_BFu16s_BFu32ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu32ll_Ui");
    static STRUCT_IF_C BFu16s_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_Ui, BFu16s_BFu32ll_Ui)
//============================================================================


struct  BFu16s_BFu32ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu32ll_Ul) C1{ Fs:16 FL:32 FL}



static void Test_BFu16s_BFu32ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu32ll_Ul");
    static STRUCT_IF_C BFu16s_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_Ul, BFu16s_BFu32ll_Ul)
//============================================================================


struct  BFu16s_BFu32ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu32ll_Us) C1{ Fs:16 FL:32 Fs}



static void Test_BFu16s_BFu32ll_Us()
{
  {
    init_simple_test("BFu16s_BFu32ll_Us");
    static STRUCT_IF_C BFu16s_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "BFu16s_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_Us, BFu16s_BFu32ll_Us)
//============================================================================


struct  BFu16s_BFu32ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu16s_BFu32ll_Vp) C1{ Fs:16 FL:32 Fp}



static void Test_BFu16s_BFu32ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu32ll_Vp");
    static STRUCT_IF_C BFu16s_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu32ll_Vp, BFu16s_BFu32ll_Vp)
//============================================================================


struct  BFu16s_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu16s_BFu33) C1{ Fs:16 FL:33}



static void Test_BFu16s_BFu33()
{
  {
    init_simple_test("BFu16s_BFu33");
    static STRUCT_IF_C BFu16s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33, BFu16s_BFu33)
//============================================================================


struct  BFu16s_BFu33_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu33_BFu15i) C1{ Fs:16 FL:33 Fi:15}



static void Test_BFu16s_BFu33_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu15i");
    static STRUCT_IF_C BFu16s_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu16s_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu15i, BFu16s_BFu33_BFu15i)
//============================================================================


struct  BFu16s_BFu33_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu33_BFu15ll) C1{ Fs:16 FL:33 FL:15}



static void Test_BFu16s_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu16s_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu15ll, BFu16s_BFu33_BFu15ll)
//============================================================================


struct  BFu16s_BFu33_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu33_BFu15s) C1{ Fs:16 FL:33 Fs:15}



static void Test_BFu16s_BFu33_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu33_BFu15s");
    static STRUCT_IF_C BFu16s_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu16s_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu15s, BFu16s_BFu33_BFu15s)
//============================================================================


struct  BFu16s_BFu33_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu33_BFu16i) C1{ Fs:16 FL:33 Fi:16}



static void Test_BFu16s_BFu33_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu16i");
    static STRUCT_IF_C BFu16s_BFu33_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu16i, BFu16s_BFu33_BFu16i)
//============================================================================


struct  BFu16s_BFu33_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu33_BFu16ll) C1{ Fs:16 FL:33 FL:16}



static void Test_BFu16s_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, 1, "BFu16s_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu16ll, BFu16s_BFu33_BFu16ll)
//============================================================================


struct  BFu16s_BFu33_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu33_BFu16s) C1{ Fs:16 FL:33 Fs:16}



static void Test_BFu16s_BFu33_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu33_BFu16s");
    static STRUCT_IF_C BFu16s_BFu33_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu16s, BFu16s_BFu33_BFu16s)
//============================================================================


struct  BFu16s_BFu33_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu33_BFu17i) C1{ Fs:16 FL:33 Fi:17}



static void Test_BFu16s_BFu33_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu17i");
    static STRUCT_IF_C BFu16s_BFu33_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu17i, BFu16s_BFu33_BFu17i)
//============================================================================


struct  BFu16s_BFu33_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu33_BFu17ll) C1{ Fs:16 FL:33 FL:17}



static void Test_BFu16s_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu16s_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu16s_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu17ll, BFu16s_BFu33_BFu17ll)
//============================================================================


struct  BFu16s_BFu33_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu33_BFu1c) C1{ Fs:16 FL:33 Fc:1}



static void Test_BFu16s_BFu33_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu33_BFu1c");
    static STRUCT_IF_C BFu16s_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu16s_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu1c, BFu16s_BFu33_BFu1c)
//============================================================================


struct  BFu16s_BFu33_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu33_BFu1i) C1{ Fs:16 FL:33 Fi:1}



static void Test_BFu16s_BFu33_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu1i");
    static STRUCT_IF_C BFu16s_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu16s_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu1i, BFu16s_BFu33_BFu1i)
//============================================================================


struct  BFu16s_BFu33_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu33_BFu1ll) C1{ Fs:16 FL:33 FL:1}



static void Test_BFu16s_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu16s_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu1ll, BFu16s_BFu33_BFu1ll)
//============================================================================


struct  BFu16s_BFu33_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu33_BFu1s) C1{ Fs:16 FL:33 Fs:1}



static void Test_BFu16s_BFu33_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu33_BFu1s");
    static STRUCT_IF_C BFu16s_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu16s_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu1s, BFu16s_BFu33_BFu1s)
//============================================================================


struct  BFu16s_BFu33_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu33_BFu31i) C1{ Fs:16 FL:33 Fi:31}



static void Test_BFu16s_BFu33_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu31i");
    static STRUCT_IF_C BFu16s_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu31i, BFu16s_BFu33_BFu31i)
//============================================================================


struct  BFu16s_BFu33_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu33_BFu31ll) C1{ Fs:16 FL:33 FL:31}



static void Test_BFu16s_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu16s_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu16s_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu31ll, BFu16s_BFu33_BFu31ll)
//============================================================================


struct  BFu16s_BFu33_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu33_BFu32i) C1{ Fs:16 FL:33 Fi:32}



static void Test_BFu16s_BFu33_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu32i");
    static STRUCT_IF_C BFu16s_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu32i, BFu16s_BFu33_BFu32i)
//============================================================================


struct  BFu16s_BFu33_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu33_BFu32ll) C1{ Fs:16 FL:33 FL:32}



static void Test_BFu16s_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu16s_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu16s_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu32ll, BFu16s_BFu33_BFu32ll)
//============================================================================


struct  BFu16s_BFu33_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu33_BFu33) C1{ Fs:16 FL:33 FL:33}



static void Test_BFu16s_BFu33_BFu33()
{
  {
    init_simple_test("BFu16s_BFu33_BFu33");
    static STRUCT_IF_C BFu16s_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, 1, "BFu16s_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu33, BFu16s_BFu33_BFu33)
//============================================================================


struct  BFu16s_BFu33_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu33_BFu7c) C1{ Fs:16 FL:33 Fc:7}



static void Test_BFu16s_BFu33_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu33_BFu7c");
    static STRUCT_IF_C BFu16s_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu16s_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu7c, BFu16s_BFu33_BFu7c)
//============================================================================


struct  BFu16s_BFu33_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu33_BFu7i) C1{ Fs:16 FL:33 Fi:7}



static void Test_BFu16s_BFu33_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu7i");
    static STRUCT_IF_C BFu16s_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu16s_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu7i, BFu16s_BFu33_BFu7i)
//============================================================================


struct  BFu16s_BFu33_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu33_BFu7ll) C1{ Fs:16 FL:33 FL:7}



static void Test_BFu16s_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu16s_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu7ll, BFu16s_BFu33_BFu7ll)
//============================================================================


struct  BFu16s_BFu33_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu33_BFu7s) C1{ Fs:16 FL:33 Fs:7}



static void Test_BFu16s_BFu33_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu33_BFu7s");
    static STRUCT_IF_C BFu16s_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu16s_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu7s, BFu16s_BFu33_BFu7s)
//============================================================================


struct  BFu16s_BFu33_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu33_BFu8c) C1{ Fs:16 FL:33 Fc:8}



static void Test_BFu16s_BFu33_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu33_BFu8c");
    static STRUCT_IF_C BFu16s_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu16s_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu8c, BFu16s_BFu33_BFu8c)
//============================================================================


struct  BFu16s_BFu33_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu33_BFu8i) C1{ Fs:16 FL:33 Fi:8}



static void Test_BFu16s_BFu33_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu8i");
    static STRUCT_IF_C BFu16s_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu16s_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu8i, BFu16s_BFu33_BFu8i)
//============================================================================


struct  BFu16s_BFu33_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu33_BFu8ll) C1{ Fs:16 FL:33 FL:8}



static void Test_BFu16s_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu16s_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu8ll, BFu16s_BFu33_BFu8ll)
//============================================================================


struct  BFu16s_BFu33_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu33_BFu8s) C1{ Fs:16 FL:33 Fs:8}



static void Test_BFu16s_BFu33_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu33_BFu8s");
    static STRUCT_IF_C BFu16s_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu16s_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu8s, BFu16s_BFu33_BFu8s)
//============================================================================


struct  BFu16s_BFu33_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu33_BFu9i) C1{ Fs:16 FL:33 Fi:9}



static void Test_BFu16s_BFu33_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu33_BFu9i");
    static STRUCT_IF_C BFu16s_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu16s_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu9i, BFu16s_BFu33_BFu9i)
//============================================================================


struct  BFu16s_BFu33_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu33_BFu9ll) C1{ Fs:16 FL:33 FL:9}



static void Test_BFu16s_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu33_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu16s_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu9ll, BFu16s_BFu33_BFu9ll)
//============================================================================


struct  BFu16s_BFu33_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu33_BFu9s) C1{ Fs:16 FL:33 Fs:9}



static void Test_BFu16s_BFu33_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu33_BFu9s");
    static STRUCT_IF_C BFu16s_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu16s_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_BFu9s, BFu16s_BFu33_BFu9s)
//============================================================================


struct  BFu16s_BFu33_C  {
  unsigned short v1:16;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu16s_BFu33_C) C1{ Fs:16 FL:33 Fc}



static void Test_BFu16s_BFu33_C()
{
  {
    init_simple_test("BFu16s_BFu33_C");
    static STRUCT_IF_C BFu16s_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_C");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_C");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_C");
    check_field_offset(lv, v3, 7, "BFu16s_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_C, BFu16s_BFu33_C)
//============================================================================


struct  BFu16s_BFu33_D  {
  unsigned short v1:16;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu16s_BFu33_D) C1{ Fs:16 FL:33 FL}



static void Test_BFu16s_BFu33_D()
{
  {
    init_simple_test("BFu16s_BFu33_D");
    static STRUCT_IF_C BFu16s_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_D");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_D");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_D, BFu16s_BFu33_D)
//============================================================================


struct  BFu16s_BFu33_F  {
  unsigned short v1:16;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu16s_BFu33_F) C1{ Fs:16 FL:33 Fi}



static void Test_BFu16s_BFu33_F()
{
  {
    init_simple_test("BFu16s_BFu33_F");
    static STRUCT_IF_C BFu16s_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_F");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_F");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_F, BFu16s_BFu33_F)
//============================================================================


struct  BFu16s_BFu33_I  {
  unsigned short v1:16;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu16s_BFu33_I) C1{ Fs:16 FL:33 Fi}



static void Test_BFu16s_BFu33_I()
{
  {
    init_simple_test("BFu16s_BFu33_I");
    static STRUCT_IF_C BFu16s_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_I");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_I");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_I, BFu16s_BFu33_I)
//============================================================================


struct  BFu16s_BFu33_Ip  {
  unsigned short v1:16;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu16s_BFu33_Ip) C1{ Fs:16 FL:33 Fp}



static void Test_BFu16s_BFu33_Ip()
{
  {
    init_simple_test("BFu16s_BFu33_Ip");
    static STRUCT_IF_C BFu16s_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_Ip");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_Ip");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_Ip, BFu16s_BFu33_Ip)
//============================================================================


struct  BFu16s_BFu33_L  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu33_L) C1{ Fs:16 FL:33 FL}



static void Test_BFu16s_BFu33_L()
{
  {
    init_simple_test("BFu16s_BFu33_L");
    static STRUCT_IF_C BFu16s_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_L");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_L");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_L, BFu16s_BFu33_L)
//============================================================================


struct  BFu16s_BFu33_S  {
  unsigned short v1:16;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu16s_BFu33_S) C1{ Fs:16 FL:33 Fs}



static void Test_BFu16s_BFu33_S()
{
  {
    init_simple_test("BFu16s_BFu33_S");
    static STRUCT_IF_C BFu16s_BFu33_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_S");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_S");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_S");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_S, BFu16s_BFu33_S)
//============================================================================


struct  BFu16s_BFu33_Uc  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu33_Uc) C1{ Fs:16 FL:33 Fc}



static void Test_BFu16s_BFu33_Uc()
{
  {
    init_simple_test("BFu16s_BFu33_Uc");
    static STRUCT_IF_C BFu16s_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_Uc");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_Uc");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_Uc");
    check_field_offset(lv, v3, 7, "BFu16s_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_Uc, BFu16s_BFu33_Uc)
//============================================================================


struct  BFu16s_BFu33_Ui  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu33_Ui) C1{ Fs:16 FL:33 Fi}



static void Test_BFu16s_BFu33_Ui()
{
  {
    init_simple_test("BFu16s_BFu33_Ui");
    static STRUCT_IF_C BFu16s_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_Ui");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_Ui");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_Ui, BFu16s_BFu33_Ui)
//============================================================================


struct  BFu16s_BFu33_Ul  {
  unsigned short v1:16;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu33_Ul) C1{ Fs:16 FL:33 FL}



static void Test_BFu16s_BFu33_Ul()
{
  {
    init_simple_test("BFu16s_BFu33_Ul");
    static STRUCT_IF_C BFu16s_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_Ul");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_Ul");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_Ul, BFu16s_BFu33_Ul)
//============================================================================


struct  BFu16s_BFu33_Us  {
  unsigned short v1:16;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu33_Us) C1{ Fs:16 FL:33 Fs}



static void Test_BFu16s_BFu33_Us()
{
  {
    init_simple_test("BFu16s_BFu33_Us");
    static STRUCT_IF_C BFu16s_BFu33_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_Us");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_Us");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_Us");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_Us, BFu16s_BFu33_Us)
//============================================================================


struct  BFu16s_BFu33_Vp  {
  unsigned short v1:16;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu16s_BFu33_Vp) C1{ Fs:16 FL:33 Fp}



static void Test_BFu16s_BFu33_Vp()
{
  {
    init_simple_test("BFu16s_BFu33_Vp");
    static STRUCT_IF_C BFu16s_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_Vp");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_Vp");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu16s_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu33_Vp, BFu16s_BFu33_Vp)
//============================================================================


struct  BFu16s_BFu7c  {
  unsigned short v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu16s_BFu7c) C1{ Fs:16 Fc:7}



static void Test_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu7c");
    static STRUCT_IF_C BFu16s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c, BFu16s_BFu7c)
//============================================================================


struct  BFu16s_BFu7c_BFu15i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu7c_BFu15i) C1{ Fs:16 Fc:7 Fi:15}



static void Test_BFu16s_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu15i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu15i, BFu16s_BFu7c_BFu15i)
//============================================================================


struct  BFu16s_BFu7c_BFu15ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu7c_BFu15ll) C1{ Fs:16 Fc:7 FL:15}



static void Test_BFu16s_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu16s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu15ll, BFu16s_BFu7c_BFu15ll)
//============================================================================


struct  BFu16s_BFu7c_BFu15s  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu7c_BFu15s) C1{ Fs:16 Fc:7 Fs:15}



static void Test_BFu16s_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu15s");
    static STRUCT_IF_C BFu16s_BFu7c_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu15s, BFu16s_BFu7c_BFu15s)
//============================================================================


struct  BFu16s_BFu7c_BFu16i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu7c_BFu16i) C1{ Fs:16 Fc:7 Fi:16}



static void Test_BFu16s_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu16i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu16i, BFu16s_BFu7c_BFu16i)
//============================================================================


struct  BFu16s_BFu7c_BFu16ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu7c_BFu16ll) C1{ Fs:16 Fc:7 FL:16}



static void Test_BFu16s_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu16s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu16ll, BFu16s_BFu7c_BFu16ll)
//============================================================================


struct  BFu16s_BFu7c_BFu16s  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu7c_BFu16s) C1{ Fs:16 Fc:7 Fs:16}



static void Test_BFu16s_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu16s");
    static STRUCT_IF_C BFu16s_BFu7c_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu16s, BFu16s_BFu7c_BFu16s)
//============================================================================


struct  BFu16s_BFu7c_BFu17i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu7c_BFu17i) C1{ Fs:16 Fc:7 Fi:17}



static void Test_BFu16s_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu17i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu17i, BFu16s_BFu7c_BFu17i)
//============================================================================


struct  BFu16s_BFu7c_BFu17ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu7c_BFu17ll) C1{ Fs:16 Fc:7 FL:17}



static void Test_BFu16s_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu16s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu17ll, BFu16s_BFu7c_BFu17ll)
//============================================================================


struct  BFu16s_BFu7c_BFu1c  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu7c_BFu1c) C1{ Fs:16 Fc:7 Fc:1}



static void Test_BFu16s_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu1c");
    static STRUCT_IF_C BFu16s_BFu7c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu1c, BFu16s_BFu7c_BFu1c)
//============================================================================


struct  BFu16s_BFu7c_BFu1i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu7c_BFu1i) C1{ Fs:16 Fc:7 Fi:1}



static void Test_BFu16s_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu1i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu1i, BFu16s_BFu7c_BFu1i)
//============================================================================


struct  BFu16s_BFu7c_BFu1ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu7c_BFu1ll) C1{ Fs:16 Fc:7 FL:1}



static void Test_BFu16s_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu1ll, BFu16s_BFu7c_BFu1ll)
//============================================================================


struct  BFu16s_BFu7c_BFu1s  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu7c_BFu1s) C1{ Fs:16 Fc:7 Fs:1}



static void Test_BFu16s_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu1s");
    static STRUCT_IF_C BFu16s_BFu7c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu1s, BFu16s_BFu7c_BFu1s)
//============================================================================


struct  BFu16s_BFu7c_BFu31i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu7c_BFu31i) C1{ Fs:16 Fc:7 Fi:31}



static void Test_BFu16s_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu31i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu31i, BFu16s_BFu7c_BFu31i)
//============================================================================


struct  BFu16s_BFu7c_BFu31ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu7c_BFu31ll) C1{ Fs:16 Fc:7 FL:31}



static void Test_BFu16s_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu16s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu16s_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu31ll, BFu16s_BFu7c_BFu31ll)
//============================================================================


struct  BFu16s_BFu7c_BFu32i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu7c_BFu32i) C1{ Fs:16 Fc:7 Fi:32}



static void Test_BFu16s_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu32i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu32i, BFu16s_BFu7c_BFu32i)
//============================================================================


struct  BFu16s_BFu7c_BFu32ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu7c_BFu32ll) C1{ Fs:16 Fc:7 FL:32}



static void Test_BFu16s_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu16s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu16s_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu32ll, BFu16s_BFu7c_BFu32ll)
//============================================================================


struct  BFu16s_BFu7c_BFu33  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu7c_BFu33) C1{ Fs:16 Fc:7 FL:33}



static void Test_BFu16s_BFu7c_BFu33()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu33");
    static STRUCT_IF_C BFu16s_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu16s_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu16s_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu33, BFu16s_BFu7c_BFu33)
//============================================================================


struct  BFu16s_BFu7c_BFu7c  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu7c_BFu7c) C1{ Fs:16 Fc:7 Fc:7}



static void Test_BFu16s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu16s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu7c, BFu16s_BFu7c_BFu7c)
//============================================================================


struct  BFu16s_BFu7c_BFu7i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu7c_BFu7i) C1{ Fs:16 Fc:7 Fi:7}



static void Test_BFu16s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu7i, BFu16s_BFu7c_BFu7i)
//============================================================================


struct  BFu16s_BFu7c_BFu7ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu7c_BFu7ll) C1{ Fs:16 Fc:7 FL:7}



static void Test_BFu16s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu7ll, BFu16s_BFu7c_BFu7ll)
//============================================================================


struct  BFu16s_BFu7c_BFu7s  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu7c_BFu7s) C1{ Fs:16 Fc:7 Fs:7}



static void Test_BFu16s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu16s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu7s, BFu16s_BFu7c_BFu7s)
//============================================================================


struct  BFu16s_BFu7c_BFu8c  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu7c_BFu8c) C1{ Fs:16 Fc:7 Fc:8}



static void Test_BFu16s_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu8c");
    static STRUCT_IF_C BFu16s_BFu7c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu8c, BFu16s_BFu7c_BFu8c)
//============================================================================


struct  BFu16s_BFu7c_BFu8i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu7c_BFu8i) C1{ Fs:16 Fc:7 Fi:8}



static void Test_BFu16s_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu8i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu8i, BFu16s_BFu7c_BFu8i)
//============================================================================


struct  BFu16s_BFu7c_BFu8ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu7c_BFu8ll) C1{ Fs:16 Fc:7 FL:8}



static void Test_BFu16s_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu8ll, BFu16s_BFu7c_BFu8ll)
//============================================================================


struct  BFu16s_BFu7c_BFu8s  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu7c_BFu8s) C1{ Fs:16 Fc:7 Fs:8}



static void Test_BFu16s_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu8s");
    static STRUCT_IF_C BFu16s_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu8s, BFu16s_BFu7c_BFu8s)
//============================================================================


struct  BFu16s_BFu7c_BFu9i  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu7c_BFu9i) C1{ Fs:16 Fc:7 Fi:9}



static void Test_BFu16s_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu9i");
    static STRUCT_IF_C BFu16s_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu9i, BFu16s_BFu7c_BFu9i)
//============================================================================


struct  BFu16s_BFu7c_BFu9ll  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu7c_BFu9ll) C1{ Fs:16 Fc:7 FL:9}



static void Test_BFu16s_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu9ll, BFu16s_BFu7c_BFu9ll)
//============================================================================


struct  BFu16s_BFu7c_BFu9s  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu7c_BFu9s) C1{ Fs:16 Fc:7 Fs:9}



static void Test_BFu16s_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu7c_BFu9s");
    static STRUCT_IF_C BFu16s_BFu7c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_BFu9s, BFu16s_BFu7c_BFu9s)
//============================================================================


struct  BFu16s_BFu7c_C  {
  unsigned short v1:16;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu16s_BFu7c_C) C1{ Fs:16 Fc:7 Fc}



static void Test_BFu16s_BFu7c_C()
{
  {
    init_simple_test("BFu16s_BFu7c_C");
    static STRUCT_IF_C BFu16s_BFu7c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_C");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_C");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_C, BFu16s_BFu7c_C)
//============================================================================


struct  BFu16s_BFu7c_D  {
  unsigned short v1:16;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu16s_BFu7c_D) C1{ Fs:16 Fc:7 FL}



static void Test_BFu16s_BFu7c_D()
{
  {
    init_simple_test("BFu16s_BFu7c_D");
    static STRUCT_IF_C BFu16s_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_D");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_D");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_D, BFu16s_BFu7c_D)
//============================================================================


struct  BFu16s_BFu7c_F  {
  unsigned short v1:16;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu16s_BFu7c_F) C1{ Fs:16 Fc:7 Fi}



static void Test_BFu16s_BFu7c_F()
{
  {
    init_simple_test("BFu16s_BFu7c_F");
    static STRUCT_IF_C BFu16s_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_F");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_F");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_F, BFu16s_BFu7c_F)
//============================================================================


struct  BFu16s_BFu7c_I  {
  unsigned short v1:16;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu16s_BFu7c_I) C1{ Fs:16 Fc:7 Fi}



static void Test_BFu16s_BFu7c_I()
{
  {
    init_simple_test("BFu16s_BFu7c_I");
    static STRUCT_IF_C BFu16s_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_I");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_I");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_I, BFu16s_BFu7c_I)
//============================================================================


struct  BFu16s_BFu7c_Ip  {
  unsigned short v1:16;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu16s_BFu7c_Ip) C1{ Fs:16 Fc:7 Fp}



static void Test_BFu16s_BFu7c_Ip()
{
  {
    init_simple_test("BFu16s_BFu7c_Ip");
    static STRUCT_IF_C BFu16s_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_Ip, BFu16s_BFu7c_Ip)
//============================================================================


struct  BFu16s_BFu7c_L  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu7c_L) C1{ Fs:16 Fc:7 FL}



static void Test_BFu16s_BFu7c_L()
{
  {
    init_simple_test("BFu16s_BFu7c_L");
    static STRUCT_IF_C BFu16s_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_L");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_L");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_L, BFu16s_BFu7c_L)
//============================================================================


struct  BFu16s_BFu7c_S  {
  unsigned short v1:16;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu16s_BFu7c_S) C1{ Fs:16 Fc:7 Fs}



static void Test_BFu16s_BFu7c_S()
{
  {
    init_simple_test("BFu16s_BFu7c_S");
    static STRUCT_IF_C BFu16s_BFu7c_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_S");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_S");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_S, BFu16s_BFu7c_S)
//============================================================================


struct  BFu16s_BFu7c_Uc  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu7c_Uc) C1{ Fs:16 Fc:7 Fc}



static void Test_BFu16s_BFu7c_Uc()
{
  {
    init_simple_test("BFu16s_BFu7c_Uc");
    static STRUCT_IF_C BFu16s_BFu7c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_Uc, BFu16s_BFu7c_Uc)
//============================================================================


struct  BFu16s_BFu7c_Ui  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu7c_Ui) C1{ Fs:16 Fc:7 Fi}



static void Test_BFu16s_BFu7c_Ui()
{
  {
    init_simple_test("BFu16s_BFu7c_Ui");
    static STRUCT_IF_C BFu16s_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_Ui, BFu16s_BFu7c_Ui)
//============================================================================


struct  BFu16s_BFu7c_Ul  {
  unsigned short v1:16;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu7c_Ul) C1{ Fs:16 Fc:7 FL}



static void Test_BFu16s_BFu7c_Ul()
{
  {
    init_simple_test("BFu16s_BFu7c_Ul");
    static STRUCT_IF_C BFu16s_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_Ul, BFu16s_BFu7c_Ul)
//============================================================================


struct  BFu16s_BFu7c_Us  {
  unsigned short v1:16;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu7c_Us) C1{ Fs:16 Fc:7 Fs}



static void Test_BFu16s_BFu7c_Us()
{
  {
    init_simple_test("BFu16s_BFu7c_Us");
    static STRUCT_IF_C BFu16s_BFu7c_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_Us, BFu16s_BFu7c_Us)
//============================================================================


struct  BFu16s_BFu7c_Vp  {
  unsigned short v1:16;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu16s_BFu7c_Vp) C1{ Fs:16 Fc:7 Fp}



static void Test_BFu16s_BFu7c_Vp()
{
  {
    init_simple_test("BFu16s_BFu7c_Vp");
    static STRUCT_IF_C BFu16s_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7c_Vp, BFu16s_BFu7c_Vp)
//============================================================================


struct  BFu16s_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu16s_BFu7i) C1{ Fs:16 Fi:7}



static void Test_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu7i");
    static STRUCT_IF_C BFu16s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i, BFu16s_BFu7i)
//============================================================================


struct  BFu16s_BFu7i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu7i_BFu15i) C1{ Fs:16 Fi:7 Fi:15}



static void Test_BFu16s_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu15i, BFu16s_BFu7i_BFu15i)
//============================================================================


struct  BFu16s_BFu7i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu7i_BFu15ll) C1{ Fs:16 Fi:7 FL:15}



static void Test_BFu16s_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu16s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu15ll, BFu16s_BFu7i_BFu15ll)
//============================================================================


struct  BFu16s_BFu7i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu7i_BFu15s) C1{ Fs:16 Fi:7 Fs:15}



static void Test_BFu16s_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu7i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu15s, BFu16s_BFu7i_BFu15s)
//============================================================================


struct  BFu16s_BFu7i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu7i_BFu16i) C1{ Fs:16 Fi:7 Fi:16}



static void Test_BFu16s_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu16i, BFu16s_BFu7i_BFu16i)
//============================================================================


struct  BFu16s_BFu7i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu7i_BFu16ll) C1{ Fs:16 Fi:7 FL:16}



static void Test_BFu16s_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu16s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu16ll, BFu16s_BFu7i_BFu16ll)
//============================================================================


struct  BFu16s_BFu7i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu7i_BFu16s) C1{ Fs:16 Fi:7 Fs:16}



static void Test_BFu16s_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu7i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu16s, BFu16s_BFu7i_BFu16s)
//============================================================================


struct  BFu16s_BFu7i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu7i_BFu17i) C1{ Fs:16 Fi:7 Fi:17}



static void Test_BFu16s_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu17i, BFu16s_BFu7i_BFu17i)
//============================================================================


struct  BFu16s_BFu7i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu7i_BFu17ll) C1{ Fs:16 Fi:7 FL:17}



static void Test_BFu16s_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu16s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu17ll, BFu16s_BFu7i_BFu17ll)
//============================================================================


struct  BFu16s_BFu7i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu7i_BFu1c) C1{ Fs:16 Fi:7 Fc:1}



static void Test_BFu16s_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu1c, BFu16s_BFu7i_BFu1c)
//============================================================================


struct  BFu16s_BFu7i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu7i_BFu1i) C1{ Fs:16 Fi:7 Fi:1}



static void Test_BFu16s_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu1i, BFu16s_BFu7i_BFu1i)
//============================================================================


struct  BFu16s_BFu7i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu7i_BFu1ll) C1{ Fs:16 Fi:7 FL:1}



static void Test_BFu16s_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu1ll, BFu16s_BFu7i_BFu1ll)
//============================================================================


struct  BFu16s_BFu7i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu7i_BFu1s) C1{ Fs:16 Fi:7 Fs:1}



static void Test_BFu16s_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu1s, BFu16s_BFu7i_BFu1s)
//============================================================================


struct  BFu16s_BFu7i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu7i_BFu31i) C1{ Fs:16 Fi:7 Fi:31}



static void Test_BFu16s_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu31i, BFu16s_BFu7i_BFu31i)
//============================================================================


struct  BFu16s_BFu7i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu7i_BFu31ll) C1{ Fs:16 Fi:7 FL:31}



static void Test_BFu16s_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu16s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu16s_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu31ll, BFu16s_BFu7i_BFu31ll)
//============================================================================


struct  BFu16s_BFu7i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu7i_BFu32i) C1{ Fs:16 Fi:7 Fi:32}



static void Test_BFu16s_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu32i, BFu16s_BFu7i_BFu32i)
//============================================================================


struct  BFu16s_BFu7i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu7i_BFu32ll) C1{ Fs:16 Fi:7 FL:32}



static void Test_BFu16s_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu16s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu16s_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu32ll, BFu16s_BFu7i_BFu32ll)
//============================================================================


struct  BFu16s_BFu7i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu7i_BFu33) C1{ Fs:16 Fi:7 FL:33}



static void Test_BFu16s_BFu7i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu33");
    static STRUCT_IF_C BFu16s_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu16s_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu16s_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu33, BFu16s_BFu7i_BFu33)
//============================================================================


struct  BFu16s_BFu7i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu7i_BFu7c) C1{ Fs:16 Fi:7 Fc:7}



static void Test_BFu16s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu7c, BFu16s_BFu7i_BFu7c)
//============================================================================


struct  BFu16s_BFu7i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu7i_BFu7i) C1{ Fs:16 Fi:7 Fi:7}



static void Test_BFu16s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu7i, BFu16s_BFu7i_BFu7i)
//============================================================================


struct  BFu16s_BFu7i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu7i_BFu7ll) C1{ Fs:16 Fi:7 FL:7}



static void Test_BFu16s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu7ll, BFu16s_BFu7i_BFu7ll)
//============================================================================


struct  BFu16s_BFu7i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu7i_BFu7s) C1{ Fs:16 Fi:7 Fs:7}



static void Test_BFu16s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu7s, BFu16s_BFu7i_BFu7s)
//============================================================================


struct  BFu16s_BFu7i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu7i_BFu8c) C1{ Fs:16 Fi:7 Fc:8}



static void Test_BFu16s_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu8c, BFu16s_BFu7i_BFu8c)
//============================================================================


struct  BFu16s_BFu7i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu7i_BFu8i) C1{ Fs:16 Fi:7 Fi:8}



static void Test_BFu16s_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu8i, BFu16s_BFu7i_BFu8i)
//============================================================================


struct  BFu16s_BFu7i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu7i_BFu8ll) C1{ Fs:16 Fi:7 FL:8}



static void Test_BFu16s_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu8ll, BFu16s_BFu7i_BFu8ll)
//============================================================================


struct  BFu16s_BFu7i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu7i_BFu8s) C1{ Fs:16 Fi:7 Fs:8}



static void Test_BFu16s_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu8s, BFu16s_BFu7i_BFu8s)
//============================================================================


struct  BFu16s_BFu7i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu7i_BFu9i) C1{ Fs:16 Fi:7 Fi:9}



static void Test_BFu16s_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu9i, BFu16s_BFu7i_BFu9i)
//============================================================================


struct  BFu16s_BFu7i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu7i_BFu9ll) C1{ Fs:16 Fi:7 FL:9}



static void Test_BFu16s_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu9ll, BFu16s_BFu7i_BFu9ll)
//============================================================================


struct  BFu16s_BFu7i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu7i_BFu9s) C1{ Fs:16 Fi:7 Fs:9}



static void Test_BFu16s_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu7i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_BFu9s, BFu16s_BFu7i_BFu9s)
//============================================================================


struct  BFu16s_BFu7i_C  {
  unsigned short v1:16;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu16s_BFu7i_C) C1{ Fs:16 Fi:7 Fc}



static void Test_BFu16s_BFu7i_C()
{
  {
    init_simple_test("BFu16s_BFu7i_C");
    static STRUCT_IF_C BFu16s_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_C");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_C");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_C, BFu16s_BFu7i_C)
//============================================================================


struct  BFu16s_BFu7i_D  {
  unsigned short v1:16;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu16s_BFu7i_D) C1{ Fs:16 Fi:7 FL}



static void Test_BFu16s_BFu7i_D()
{
  {
    init_simple_test("BFu16s_BFu7i_D");
    static STRUCT_IF_C BFu16s_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_D");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_D");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_D, BFu16s_BFu7i_D)
//============================================================================


struct  BFu16s_BFu7i_F  {
  unsigned short v1:16;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu16s_BFu7i_F) C1{ Fs:16 Fi:7 Fi}



static void Test_BFu16s_BFu7i_F()
{
  {
    init_simple_test("BFu16s_BFu7i_F");
    static STRUCT_IF_C BFu16s_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_F");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_F");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_F, BFu16s_BFu7i_F)
//============================================================================


struct  BFu16s_BFu7i_I  {
  unsigned short v1:16;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu16s_BFu7i_I) C1{ Fs:16 Fi:7 Fi}



static void Test_BFu16s_BFu7i_I()
{
  {
    init_simple_test("BFu16s_BFu7i_I");
    static STRUCT_IF_C BFu16s_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_I");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_I");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_I, BFu16s_BFu7i_I)
//============================================================================


struct  BFu16s_BFu7i_Ip  {
  unsigned short v1:16;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu16s_BFu7i_Ip) C1{ Fs:16 Fi:7 Fp}



static void Test_BFu16s_BFu7i_Ip()
{
  {
    init_simple_test("BFu16s_BFu7i_Ip");
    static STRUCT_IF_C BFu16s_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_Ip, BFu16s_BFu7i_Ip)
//============================================================================


struct  BFu16s_BFu7i_L  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu7i_L) C1{ Fs:16 Fi:7 FL}



static void Test_BFu16s_BFu7i_L()
{
  {
    init_simple_test("BFu16s_BFu7i_L");
    static STRUCT_IF_C BFu16s_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_L");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_L");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_L, BFu16s_BFu7i_L)
//============================================================================


struct  BFu16s_BFu7i_S  {
  unsigned short v1:16;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu16s_BFu7i_S) C1{ Fs:16 Fi:7 Fs}



static void Test_BFu16s_BFu7i_S()
{
  {
    init_simple_test("BFu16s_BFu7i_S");
    static STRUCT_IF_C BFu16s_BFu7i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_S");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_S");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_S, BFu16s_BFu7i_S)
//============================================================================


struct  BFu16s_BFu7i_Uc  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu7i_Uc) C1{ Fs:16 Fi:7 Fc}



static void Test_BFu16s_BFu7i_Uc()
{
  {
    init_simple_test("BFu16s_BFu7i_Uc");
    static STRUCT_IF_C BFu16s_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_Uc, BFu16s_BFu7i_Uc)
//============================================================================


struct  BFu16s_BFu7i_Ui  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu7i_Ui) C1{ Fs:16 Fi:7 Fi}



static void Test_BFu16s_BFu7i_Ui()
{
  {
    init_simple_test("BFu16s_BFu7i_Ui");
    static STRUCT_IF_C BFu16s_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_Ui, BFu16s_BFu7i_Ui)
//============================================================================


struct  BFu16s_BFu7i_Ul  {
  unsigned short v1:16;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu7i_Ul) C1{ Fs:16 Fi:7 FL}



static void Test_BFu16s_BFu7i_Ul()
{
  {
    init_simple_test("BFu16s_BFu7i_Ul");
    static STRUCT_IF_C BFu16s_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_Ul, BFu16s_BFu7i_Ul)
//============================================================================


struct  BFu16s_BFu7i_Us  {
  unsigned short v1:16;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu7i_Us) C1{ Fs:16 Fi:7 Fs}



static void Test_BFu16s_BFu7i_Us()
{
  {
    init_simple_test("BFu16s_BFu7i_Us");
    static STRUCT_IF_C BFu16s_BFu7i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_Us, BFu16s_BFu7i_Us)
//============================================================================


struct  BFu16s_BFu7i_Vp  {
  unsigned short v1:16;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu16s_BFu7i_Vp) C1{ Fs:16 Fi:7 Fp}



static void Test_BFu16s_BFu7i_Vp()
{
  {
    init_simple_test("BFu16s_BFu7i_Vp");
    static STRUCT_IF_C BFu16s_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7i_Vp, BFu16s_BFu7i_Vp)
//============================================================================


struct  BFu16s_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu16s_BFu7ll) C1{ Fs:16 FL:7}



static void Test_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll, BFu16s_BFu7ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu7ll_BFu15i) C1{ Fs:16 FL:7 Fi:15}



static void Test_BFu16s_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu15i, BFu16s_BFu7ll_BFu15i)
//============================================================================


struct  BFu16s_BFu7ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu7ll_BFu15ll) C1{ Fs:16 FL:7 FL:15}



static void Test_BFu16s_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu16s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu15ll, BFu16s_BFu7ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu7ll_BFu15s) C1{ Fs:16 FL:7 Fs:15}



static void Test_BFu16s_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu15s, BFu16s_BFu7ll_BFu15s)
//============================================================================


struct  BFu16s_BFu7ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu7ll_BFu16i) C1{ Fs:16 FL:7 Fi:16}



static void Test_BFu16s_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu16i, BFu16s_BFu7ll_BFu16i)
//============================================================================


struct  BFu16s_BFu7ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu7ll_BFu16ll) C1{ Fs:16 FL:7 FL:16}



static void Test_BFu16s_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu16s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu16ll, BFu16s_BFu7ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu7ll_BFu16s) C1{ Fs:16 FL:7 Fs:16}



static void Test_BFu16s_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu16s, BFu16s_BFu7ll_BFu16s)
//============================================================================


struct  BFu16s_BFu7ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu7ll_BFu17i) C1{ Fs:16 FL:7 Fi:17}



static void Test_BFu16s_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu17i, BFu16s_BFu7ll_BFu17i)
//============================================================================


struct  BFu16s_BFu7ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu7ll_BFu17ll) C1{ Fs:16 FL:7 FL:17}



static void Test_BFu16s_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu16s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu17ll, BFu16s_BFu7ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu7ll_BFu1c) C1{ Fs:16 FL:7 Fc:1}



static void Test_BFu16s_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu1c, BFu16s_BFu7ll_BFu1c)
//============================================================================


struct  BFu16s_BFu7ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu7ll_BFu1i) C1{ Fs:16 FL:7 Fi:1}



static void Test_BFu16s_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu1i, BFu16s_BFu7ll_BFu1i)
//============================================================================


struct  BFu16s_BFu7ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu7ll_BFu1ll) C1{ Fs:16 FL:7 FL:1}



static void Test_BFu16s_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu1ll, BFu16s_BFu7ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu7ll_BFu1s) C1{ Fs:16 FL:7 Fs:1}



static void Test_BFu16s_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu1s, BFu16s_BFu7ll_BFu1s)
//============================================================================


struct  BFu16s_BFu7ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu7ll_BFu31i) C1{ Fs:16 FL:7 Fi:31}



static void Test_BFu16s_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu31i, BFu16s_BFu7ll_BFu31i)
//============================================================================


struct  BFu16s_BFu7ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu7ll_BFu31ll) C1{ Fs:16 FL:7 FL:31}



static void Test_BFu16s_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu16s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu16s_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu31ll, BFu16s_BFu7ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu7ll_BFu32i) C1{ Fs:16 FL:7 Fi:32}



static void Test_BFu16s_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu32i, BFu16s_BFu7ll_BFu32i)
//============================================================================


struct  BFu16s_BFu7ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu7ll_BFu32ll) C1{ Fs:16 FL:7 FL:32}



static void Test_BFu16s_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu16s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu16s_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu32ll, BFu16s_BFu7ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu7ll_BFu33) C1{ Fs:16 FL:7 FL:33}



static void Test_BFu16s_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu16s_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu16s_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu33, BFu16s_BFu7ll_BFu33)
//============================================================================


struct  BFu16s_BFu7ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu7ll_BFu7c) C1{ Fs:16 FL:7 Fc:7}



static void Test_BFu16s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu7c, BFu16s_BFu7ll_BFu7c)
//============================================================================


struct  BFu16s_BFu7ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu7ll_BFu7i) C1{ Fs:16 FL:7 Fi:7}



static void Test_BFu16s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu7i, BFu16s_BFu7ll_BFu7i)
//============================================================================


struct  BFu16s_BFu7ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu7ll_BFu7ll) C1{ Fs:16 FL:7 FL:7}



static void Test_BFu16s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu7ll, BFu16s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu7ll_BFu7s) C1{ Fs:16 FL:7 Fs:7}



static void Test_BFu16s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu7s, BFu16s_BFu7ll_BFu7s)
//============================================================================


struct  BFu16s_BFu7ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu7ll_BFu8c) C1{ Fs:16 FL:7 Fc:8}



static void Test_BFu16s_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu8c, BFu16s_BFu7ll_BFu8c)
//============================================================================


struct  BFu16s_BFu7ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu7ll_BFu8i) C1{ Fs:16 FL:7 Fi:8}



static void Test_BFu16s_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu8i, BFu16s_BFu7ll_BFu8i)
//============================================================================


struct  BFu16s_BFu7ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu7ll_BFu8ll) C1{ Fs:16 FL:7 FL:8}



static void Test_BFu16s_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu8ll, BFu16s_BFu7ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu7ll_BFu8s) C1{ Fs:16 FL:7 Fs:8}



static void Test_BFu16s_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu8s, BFu16s_BFu7ll_BFu8s)
//============================================================================


struct  BFu16s_BFu7ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu7ll_BFu9i) C1{ Fs:16 FL:7 Fi:9}



static void Test_BFu16s_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu9i, BFu16s_BFu7ll_BFu9i)
//============================================================================


struct  BFu16s_BFu7ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu7ll_BFu9ll) C1{ Fs:16 FL:7 FL:9}



static void Test_BFu16s_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu9ll, BFu16s_BFu7ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu7ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu7ll_BFu9s) C1{ Fs:16 FL:7 Fs:9}



static void Test_BFu16s_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_BFu9s, BFu16s_BFu7ll_BFu9s)
//============================================================================


struct  BFu16s_BFu7ll_C  {
  unsigned short v1:16;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu16s_BFu7ll_C) C1{ Fs:16 FL:7 Fc}



static void Test_BFu16s_BFu7ll_C()
{
  {
    init_simple_test("BFu16s_BFu7ll_C");
    static STRUCT_IF_C BFu16s_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_C");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_C");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_C, BFu16s_BFu7ll_C)
//============================================================================


struct  BFu16s_BFu7ll_D  {
  unsigned short v1:16;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu16s_BFu7ll_D) C1{ Fs:16 FL:7 FL}



static void Test_BFu16s_BFu7ll_D()
{
  {
    init_simple_test("BFu16s_BFu7ll_D");
    static STRUCT_IF_C BFu16s_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_D");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_D");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_D, BFu16s_BFu7ll_D)
//============================================================================


struct  BFu16s_BFu7ll_F  {
  unsigned short v1:16;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu16s_BFu7ll_F) C1{ Fs:16 FL:7 Fi}



static void Test_BFu16s_BFu7ll_F()
{
  {
    init_simple_test("BFu16s_BFu7ll_F");
    static STRUCT_IF_C BFu16s_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_F");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_F");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_F, BFu16s_BFu7ll_F)
//============================================================================


struct  BFu16s_BFu7ll_I  {
  unsigned short v1:16;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu16s_BFu7ll_I) C1{ Fs:16 FL:7 Fi}



static void Test_BFu16s_BFu7ll_I()
{
  {
    init_simple_test("BFu16s_BFu7ll_I");
    static STRUCT_IF_C BFu16s_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_I");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_I");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_I, BFu16s_BFu7ll_I)
//============================================================================


struct  BFu16s_BFu7ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu16s_BFu7ll_Ip) C1{ Fs:16 FL:7 Fp}



static void Test_BFu16s_BFu7ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu7ll_Ip");
    static STRUCT_IF_C BFu16s_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_Ip, BFu16s_BFu7ll_Ip)
//============================================================================


struct  BFu16s_BFu7ll_L  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu7ll_L) C1{ Fs:16 FL:7 FL}



static void Test_BFu16s_BFu7ll_L()
{
  {
    init_simple_test("BFu16s_BFu7ll_L");
    static STRUCT_IF_C BFu16s_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_L");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_L");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_L, BFu16s_BFu7ll_L)
//============================================================================


struct  BFu16s_BFu7ll_S  {
  unsigned short v1:16;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu16s_BFu7ll_S) C1{ Fs:16 FL:7 Fs}



static void Test_BFu16s_BFu7ll_S()
{
  {
    init_simple_test("BFu16s_BFu7ll_S");
    static STRUCT_IF_C BFu16s_BFu7ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_S");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_S");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_S, BFu16s_BFu7ll_S)
//============================================================================


struct  BFu16s_BFu7ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu7ll_Uc) C1{ Fs:16 FL:7 Fc}



static void Test_BFu16s_BFu7ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu7ll_Uc");
    static STRUCT_IF_C BFu16s_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_Uc, BFu16s_BFu7ll_Uc)
//============================================================================


struct  BFu16s_BFu7ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu7ll_Ui) C1{ Fs:16 FL:7 Fi}



static void Test_BFu16s_BFu7ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu7ll_Ui");
    static STRUCT_IF_C BFu16s_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_Ui, BFu16s_BFu7ll_Ui)
//============================================================================


struct  BFu16s_BFu7ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu7ll_Ul) C1{ Fs:16 FL:7 FL}



static void Test_BFu16s_BFu7ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu7ll_Ul");
    static STRUCT_IF_C BFu16s_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_Ul, BFu16s_BFu7ll_Ul)
//============================================================================


struct  BFu16s_BFu7ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu7ll_Us) C1{ Fs:16 FL:7 Fs}



static void Test_BFu16s_BFu7ll_Us()
{
  {
    init_simple_test("BFu16s_BFu7ll_Us");
    static STRUCT_IF_C BFu16s_BFu7ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_Us, BFu16s_BFu7ll_Us)
//============================================================================


struct  BFu16s_BFu7ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu16s_BFu7ll_Vp) C1{ Fs:16 FL:7 Fp}



static void Test_BFu16s_BFu7ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu7ll_Vp");
    static STRUCT_IF_C BFu16s_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7ll_Vp, BFu16s_BFu7ll_Vp)
//============================================================================


struct  BFu16s_BFu7s  {
  unsigned short v1:16;
  unsigned short v2:7;
};
//SIG(1 BFu16s_BFu7s) C1{ Fs:16 Fs:7}



static void Test_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu7s");
    static STRUCT_IF_C BFu16s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s, BFu16s_BFu7s)
//============================================================================


struct  BFu16s_BFu7s_BFu15i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu7s_BFu15i) C1{ Fs:16 Fs:7 Fi:15}



static void Test_BFu16s_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu15i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu15i, BFu16s_BFu7s_BFu15i)
//============================================================================


struct  BFu16s_BFu7s_BFu15ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu7s_BFu15ll) C1{ Fs:16 Fs:7 FL:15}



static void Test_BFu16s_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu16s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu16s_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu15ll, BFu16s_BFu7s_BFu15ll)
//============================================================================


struct  BFu16s_BFu7s_BFu15s  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu7s_BFu15s) C1{ Fs:16 Fs:7 Fs:15}



static void Test_BFu16s_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu15s");
    static STRUCT_IF_C BFu16s_BFu7s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu15s, BFu16s_BFu7s_BFu15s)
//============================================================================


struct  BFu16s_BFu7s_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu7s_BFu16i) C1{ Fs:16 Fs:7 Fi:16}



static void Test_BFu16s_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu16i, BFu16s_BFu7s_BFu16i)
//============================================================================


struct  BFu16s_BFu7s_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu7s_BFu16ll) C1{ Fs:16 Fs:7 FL:16}



static void Test_BFu16s_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu16s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu16ll, BFu16s_BFu7s_BFu16ll)
//============================================================================


struct  BFu16s_BFu7s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu7s_BFu16s) C1{ Fs:16 Fs:7 Fs:16}



static void Test_BFu16s_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu7s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu16s, BFu16s_BFu7s_BFu16s)
//============================================================================


struct  BFu16s_BFu7s_BFu17i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu7s_BFu17i) C1{ Fs:16 Fs:7 Fi:17}



static void Test_BFu16s_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu17i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu17i, BFu16s_BFu7s_BFu17i)
//============================================================================


struct  BFu16s_BFu7s_BFu17ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu7s_BFu17ll) C1{ Fs:16 Fs:7 FL:17}



static void Test_BFu16s_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu16s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu16s_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu17ll, BFu16s_BFu7s_BFu17ll)
//============================================================================


struct  BFu16s_BFu7s_BFu1c  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu7s_BFu1c) C1{ Fs:16 Fs:7 Fc:1}



static void Test_BFu16s_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu1c");
    static STRUCT_IF_C BFu16s_BFu7s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu1c, BFu16s_BFu7s_BFu1c)
//============================================================================


struct  BFu16s_BFu7s_BFu1i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu7s_BFu1i) C1{ Fs:16 Fs:7 Fi:1}



static void Test_BFu16s_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu1i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu1i, BFu16s_BFu7s_BFu1i)
//============================================================================


struct  BFu16s_BFu7s_BFu1ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu7s_BFu1ll) C1{ Fs:16 Fs:7 FL:1}



static void Test_BFu16s_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu1ll, BFu16s_BFu7s_BFu1ll)
//============================================================================


struct  BFu16s_BFu7s_BFu1s  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu7s_BFu1s) C1{ Fs:16 Fs:7 Fs:1}



static void Test_BFu16s_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu1s");
    static STRUCT_IF_C BFu16s_BFu7s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu16s_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu1s, BFu16s_BFu7s_BFu1s)
//============================================================================


struct  BFu16s_BFu7s_BFu31i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu7s_BFu31i) C1{ Fs:16 Fs:7 Fi:31}



static void Test_BFu16s_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu31i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu31i, BFu16s_BFu7s_BFu31i)
//============================================================================


struct  BFu16s_BFu7s_BFu31ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu7s_BFu31ll) C1{ Fs:16 Fs:7 FL:31}



static void Test_BFu16s_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu16s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu16s_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu31ll, BFu16s_BFu7s_BFu31ll)
//============================================================================


struct  BFu16s_BFu7s_BFu32i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu7s_BFu32i) C1{ Fs:16 Fs:7 Fi:32}



static void Test_BFu16s_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu32i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu32i, BFu16s_BFu7s_BFu32i)
//============================================================================


struct  BFu16s_BFu7s_BFu32ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu7s_BFu32ll) C1{ Fs:16 Fs:7 FL:32}



static void Test_BFu16s_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu16s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu16s_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu32ll, BFu16s_BFu7s_BFu32ll)
//============================================================================


struct  BFu16s_BFu7s_BFu33  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu7s_BFu33) C1{ Fs:16 Fs:7 FL:33}



static void Test_BFu16s_BFu7s_BFu33()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu33");
    static STRUCT_IF_C BFu16s_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu16s_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu16s_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu33, BFu16s_BFu7s_BFu33)
//============================================================================


struct  BFu16s_BFu7s_BFu7c  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu7s_BFu7c) C1{ Fs:16 Fs:7 Fc:7}



static void Test_BFu16s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu16s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu7c, BFu16s_BFu7s_BFu7c)
//============================================================================


struct  BFu16s_BFu7s_BFu7i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu7s_BFu7i) C1{ Fs:16 Fs:7 Fi:7}



static void Test_BFu16s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu7i, BFu16s_BFu7s_BFu7i)
//============================================================================


struct  BFu16s_BFu7s_BFu7ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu7s_BFu7ll) C1{ Fs:16 Fs:7 FL:7}



static void Test_BFu16s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu7ll, BFu16s_BFu7s_BFu7ll)
//============================================================================


struct  BFu16s_BFu7s_BFu7s  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu7s_BFu7s) C1{ Fs:16 Fs:7 Fs:7}



static void Test_BFu16s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu16s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu16s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu7s, BFu16s_BFu7s_BFu7s)
//============================================================================


struct  BFu16s_BFu7s_BFu8c  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu7s_BFu8c) C1{ Fs:16 Fs:7 Fc:8}



static void Test_BFu16s_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu8c");
    static STRUCT_IF_C BFu16s_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu8c, BFu16s_BFu7s_BFu8c)
//============================================================================


struct  BFu16s_BFu7s_BFu8i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu7s_BFu8i) C1{ Fs:16 Fs:7 Fi:8}



static void Test_BFu16s_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu8i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu8i, BFu16s_BFu7s_BFu8i)
//============================================================================


struct  BFu16s_BFu7s_BFu8ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu7s_BFu8ll) C1{ Fs:16 Fs:7 FL:8}



static void Test_BFu16s_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu8ll, BFu16s_BFu7s_BFu8ll)
//============================================================================


struct  BFu16s_BFu7s_BFu8s  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu7s_BFu8s) C1{ Fs:16 Fs:7 Fs:8}



static void Test_BFu16s_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu8s");
    static STRUCT_IF_C BFu16s_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu16s_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu16s_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu8s, BFu16s_BFu7s_BFu8s)
//============================================================================


struct  BFu16s_BFu7s_BFu9i  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu7s_BFu9i) C1{ Fs:16 Fs:7 Fi:9}



static void Test_BFu16s_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu9i");
    static STRUCT_IF_C BFu16s_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu9i, BFu16s_BFu7s_BFu9i)
//============================================================================


struct  BFu16s_BFu7s_BFu9ll  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu7s_BFu9ll) C1{ Fs:16 Fs:7 FL:9}



static void Test_BFu16s_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu9ll, BFu16s_BFu7s_BFu9ll)
//============================================================================


struct  BFu16s_BFu7s_BFu9s  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu7s_BFu9s) C1{ Fs:16 Fs:7 Fs:9}



static void Test_BFu16s_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu7s_BFu9s");
    static STRUCT_IF_C BFu16s_BFu7s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu16s_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu16s_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_BFu9s, BFu16s_BFu7s_BFu9s)
//============================================================================


struct  BFu16s_BFu7s_C  {
  unsigned short v1:16;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu16s_BFu7s_C) C1{ Fs:16 Fs:7 Fc}



static void Test_BFu16s_BFu7s_C()
{
  {
    init_simple_test("BFu16s_BFu7s_C");
    static STRUCT_IF_C BFu16s_BFu7s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_C, BFu16s_BFu7s_C)
//============================================================================


struct  BFu16s_BFu7s_D  {
  unsigned short v1:16;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu16s_BFu7s_D) C1{ Fs:16 Fs:7 FL}



static void Test_BFu16s_BFu7s_D()
{
  {
    init_simple_test("BFu16s_BFu7s_D");
    static STRUCT_IF_C BFu16s_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_D, BFu16s_BFu7s_D)
//============================================================================


struct  BFu16s_BFu7s_F  {
  unsigned short v1:16;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu16s_BFu7s_F) C1{ Fs:16 Fs:7 Fi}



static void Test_BFu16s_BFu7s_F()
{
  {
    init_simple_test("BFu16s_BFu7s_F");
    static STRUCT_IF_C BFu16s_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_F, BFu16s_BFu7s_F)
//============================================================================


struct  BFu16s_BFu7s_I  {
  unsigned short v1:16;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu16s_BFu7s_I) C1{ Fs:16 Fs:7 Fi}



static void Test_BFu16s_BFu7s_I()
{
  {
    init_simple_test("BFu16s_BFu7s_I");
    static STRUCT_IF_C BFu16s_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_I, BFu16s_BFu7s_I)
//============================================================================


struct  BFu16s_BFu7s_Ip  {
  unsigned short v1:16;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu16s_BFu7s_Ip) C1{ Fs:16 Fs:7 Fp}



static void Test_BFu16s_BFu7s_Ip()
{
  {
    init_simple_test("BFu16s_BFu7s_Ip");
    static STRUCT_IF_C BFu16s_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_Ip, BFu16s_BFu7s_Ip)
//============================================================================


struct  BFu16s_BFu7s_L  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu7s_L) C1{ Fs:16 Fs:7 FL}



static void Test_BFu16s_BFu7s_L()
{
  {
    init_simple_test("BFu16s_BFu7s_L");
    static STRUCT_IF_C BFu16s_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_L, BFu16s_BFu7s_L)
//============================================================================


struct  BFu16s_BFu7s_S  {
  unsigned short v1:16;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu16s_BFu7s_S) C1{ Fs:16 Fs:7 Fs}



static void Test_BFu16s_BFu7s_S()
{
  {
    init_simple_test("BFu16s_BFu7s_S");
    static STRUCT_IF_C BFu16s_BFu7s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_S, BFu16s_BFu7s_S)
//============================================================================


struct  BFu16s_BFu7s_Uc  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu7s_Uc) C1{ Fs:16 Fs:7 Fc}



static void Test_BFu16s_BFu7s_Uc()
{
  {
    init_simple_test("BFu16s_BFu7s_Uc");
    static STRUCT_IF_C BFu16s_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_Uc, BFu16s_BFu7s_Uc)
//============================================================================


struct  BFu16s_BFu7s_Ui  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu7s_Ui) C1{ Fs:16 Fs:7 Fi}



static void Test_BFu16s_BFu7s_Ui()
{
  {
    init_simple_test("BFu16s_BFu7s_Ui");
    static STRUCT_IF_C BFu16s_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_Ui, BFu16s_BFu7s_Ui)
//============================================================================


struct  BFu16s_BFu7s_Ul  {
  unsigned short v1:16;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu7s_Ul) C1{ Fs:16 Fs:7 FL}



static void Test_BFu16s_BFu7s_Ul()
{
  {
    init_simple_test("BFu16s_BFu7s_Ul");
    static STRUCT_IF_C BFu16s_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_Ul, BFu16s_BFu7s_Ul)
//============================================================================


struct  BFu16s_BFu7s_Us  {
  unsigned short v1:16;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu7s_Us) C1{ Fs:16 Fs:7 Fs}



static void Test_BFu16s_BFu7s_Us()
{
  {
    init_simple_test("BFu16s_BFu7s_Us");
    static STRUCT_IF_C BFu16s_BFu7s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_Us, BFu16s_BFu7s_Us)
//============================================================================


struct  BFu16s_BFu7s_Vp  {
  unsigned short v1:16;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu16s_BFu7s_Vp) C1{ Fs:16 Fs:7 Fp}



static void Test_BFu16s_BFu7s_Vp()
{
  {
    init_simple_test("BFu16s_BFu7s_Vp");
    static STRUCT_IF_C BFu16s_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu7s_Vp, BFu16s_BFu7s_Vp)
//============================================================================


struct  BFu16s_BFu8c  {
  unsigned short v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu16s_BFu8c) C1{ Fs:16 Fc:8}



static void Test_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu8c");
    static STRUCT_IF_C BFu16s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c, BFu16s_BFu8c)
//============================================================================


struct  BFu16s_BFu8c_BFu15i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu8c_BFu15i) C1{ Fs:16 Fc:8 Fi:15}



static void Test_BFu16s_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu15i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu15i, BFu16s_BFu8c_BFu15i)
//============================================================================


struct  BFu16s_BFu8c_BFu15ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu8c_BFu15ll) C1{ Fs:16 Fc:8 FL:15}



static void Test_BFu16s_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu15ll, BFu16s_BFu8c_BFu15ll)
//============================================================================


struct  BFu16s_BFu8c_BFu15s  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu8c_BFu15s) C1{ Fs:16 Fc:8 Fs:15}



static void Test_BFu16s_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu15s");
    static STRUCT_IF_C BFu16s_BFu8c_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu15s, BFu16s_BFu8c_BFu15s)
//============================================================================


struct  BFu16s_BFu8c_BFu16i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu8c_BFu16i) C1{ Fs:16 Fc:8 Fi:16}



static void Test_BFu16s_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu16i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu16i, BFu16s_BFu8c_BFu16i)
//============================================================================


struct  BFu16s_BFu8c_BFu16ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu8c_BFu16ll) C1{ Fs:16 Fc:8 FL:16}



static void Test_BFu16s_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu16ll, BFu16s_BFu8c_BFu16ll)
//============================================================================


struct  BFu16s_BFu8c_BFu16s  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu8c_BFu16s) C1{ Fs:16 Fc:8 Fs:16}



static void Test_BFu16s_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu16s");
    static STRUCT_IF_C BFu16s_BFu8c_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu16s, BFu16s_BFu8c_BFu16s)
//============================================================================


struct  BFu16s_BFu8c_BFu17i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu8c_BFu17i) C1{ Fs:16 Fc:8 Fi:17}



static void Test_BFu16s_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu17i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu17i, BFu16s_BFu8c_BFu17i)
//============================================================================


struct  BFu16s_BFu8c_BFu17ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu8c_BFu17ll) C1{ Fs:16 Fc:8 FL:17}



static void Test_BFu16s_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu17ll, BFu16s_BFu8c_BFu17ll)
//============================================================================


struct  BFu16s_BFu8c_BFu1c  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu8c_BFu1c) C1{ Fs:16 Fc:8 Fc:1}



static void Test_BFu16s_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu1c");
    static STRUCT_IF_C BFu16s_BFu8c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu1c, BFu16s_BFu8c_BFu1c)
//============================================================================


struct  BFu16s_BFu8c_BFu1i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu8c_BFu1i) C1{ Fs:16 Fc:8 Fi:1}



static void Test_BFu16s_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu1i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu1i, BFu16s_BFu8c_BFu1i)
//============================================================================


struct  BFu16s_BFu8c_BFu1ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu8c_BFu1ll) C1{ Fs:16 Fc:8 FL:1}



static void Test_BFu16s_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu1ll, BFu16s_BFu8c_BFu1ll)
//============================================================================


struct  BFu16s_BFu8c_BFu1s  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu8c_BFu1s) C1{ Fs:16 Fc:8 Fs:1}



static void Test_BFu16s_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu1s");
    static STRUCT_IF_C BFu16s_BFu8c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu1s, BFu16s_BFu8c_BFu1s)
//============================================================================


struct  BFu16s_BFu8c_BFu31i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu8c_BFu31i) C1{ Fs:16 Fc:8 Fi:31}



static void Test_BFu16s_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu31i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu31i, BFu16s_BFu8c_BFu31i)
//============================================================================


struct  BFu16s_BFu8c_BFu31ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu8c_BFu31ll) C1{ Fs:16 Fc:8 FL:31}



static void Test_BFu16s_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu31ll, BFu16s_BFu8c_BFu31ll)
//============================================================================


struct  BFu16s_BFu8c_BFu32i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu8c_BFu32i) C1{ Fs:16 Fc:8 Fi:32}



static void Test_BFu16s_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu32i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu32i, BFu16s_BFu8c_BFu32i)
//============================================================================


struct  BFu16s_BFu8c_BFu32ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu8c_BFu32ll) C1{ Fs:16 Fc:8 FL:32}



static void Test_BFu16s_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu32ll, BFu16s_BFu8c_BFu32ll)
//============================================================================


struct  BFu16s_BFu8c_BFu33  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu8c_BFu33) C1{ Fs:16 Fc:8 FL:33}



static void Test_BFu16s_BFu8c_BFu33()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu33");
    static STRUCT_IF_C BFu16s_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16s_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu33, BFu16s_BFu8c_BFu33)
//============================================================================


struct  BFu16s_BFu8c_BFu7c  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu8c_BFu7c) C1{ Fs:16 Fc:8 Fc:7}



static void Test_BFu16s_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu7c");
    static STRUCT_IF_C BFu16s_BFu8c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu7c, BFu16s_BFu8c_BFu7c)
//============================================================================


struct  BFu16s_BFu8c_BFu7i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu8c_BFu7i) C1{ Fs:16 Fc:8 Fi:7}



static void Test_BFu16s_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu7i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu7i, BFu16s_BFu8c_BFu7i)
//============================================================================


struct  BFu16s_BFu8c_BFu7ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu8c_BFu7ll) C1{ Fs:16 Fc:8 FL:7}



static void Test_BFu16s_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu7ll, BFu16s_BFu8c_BFu7ll)
//============================================================================


struct  BFu16s_BFu8c_BFu7s  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu8c_BFu7s) C1{ Fs:16 Fc:8 Fs:7}



static void Test_BFu16s_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu7s");
    static STRUCT_IF_C BFu16s_BFu8c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu7s, BFu16s_BFu8c_BFu7s)
//============================================================================


struct  BFu16s_BFu8c_BFu8c  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu8c_BFu8c) C1{ Fs:16 Fc:8 Fc:8}



static void Test_BFu16s_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu8c");
    static STRUCT_IF_C BFu16s_BFu8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu8c, BFu16s_BFu8c_BFu8c)
//============================================================================


struct  BFu16s_BFu8c_BFu8i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu8c_BFu8i) C1{ Fs:16 Fc:8 Fi:8}



static void Test_BFu16s_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu8i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu8i, BFu16s_BFu8c_BFu8i)
//============================================================================


struct  BFu16s_BFu8c_BFu8ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu8c_BFu8ll) C1{ Fs:16 Fc:8 FL:8}



static void Test_BFu16s_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu8ll, BFu16s_BFu8c_BFu8ll)
//============================================================================


struct  BFu16s_BFu8c_BFu8s  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu8c_BFu8s) C1{ Fs:16 Fc:8 Fs:8}



static void Test_BFu16s_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu8s");
    static STRUCT_IF_C BFu16s_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu8s, BFu16s_BFu8c_BFu8s)
//============================================================================


struct  BFu16s_BFu8c_BFu9i  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu8c_BFu9i) C1{ Fs:16 Fc:8 Fi:9}



static void Test_BFu16s_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu9i");
    static STRUCT_IF_C BFu16s_BFu8c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu9i, BFu16s_BFu8c_BFu9i)
//============================================================================


struct  BFu16s_BFu8c_BFu9ll  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu8c_BFu9ll) C1{ Fs:16 Fc:8 FL:9}



static void Test_BFu16s_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu8c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu9ll, BFu16s_BFu8c_BFu9ll)
//============================================================================


struct  BFu16s_BFu8c_BFu9s  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu8c_BFu9s) C1{ Fs:16 Fc:8 Fs:9}



static void Test_BFu16s_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu8c_BFu9s");
    static STRUCT_IF_C BFu16s_BFu8c_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_BFu9s, BFu16s_BFu8c_BFu9s)
//============================================================================


struct  BFu16s_BFu8c_C  {
  unsigned short v1:16;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu16s_BFu8c_C) C1{ Fs:16 Fc:8 Fc}



static void Test_BFu16s_BFu8c_C()
{
  {
    init_simple_test("BFu16s_BFu8c_C");
    static STRUCT_IF_C BFu16s_BFu8c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_C, BFu16s_BFu8c_C)
//============================================================================


struct  BFu16s_BFu8c_D  {
  unsigned short v1:16;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu16s_BFu8c_D) C1{ Fs:16 Fc:8 FL}



static void Test_BFu16s_BFu8c_D()
{
  {
    init_simple_test("BFu16s_BFu8c_D");
    static STRUCT_IF_C BFu16s_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_D, BFu16s_BFu8c_D)
//============================================================================


struct  BFu16s_BFu8c_F  {
  unsigned short v1:16;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu16s_BFu8c_F) C1{ Fs:16 Fc:8 Fi}



static void Test_BFu16s_BFu8c_F()
{
  {
    init_simple_test("BFu16s_BFu8c_F");
    static STRUCT_IF_C BFu16s_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_F, BFu16s_BFu8c_F)
//============================================================================


struct  BFu16s_BFu8c_I  {
  unsigned short v1:16;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu16s_BFu8c_I) C1{ Fs:16 Fc:8 Fi}



static void Test_BFu16s_BFu8c_I()
{
  {
    init_simple_test("BFu16s_BFu8c_I");
    static STRUCT_IF_C BFu16s_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_I, BFu16s_BFu8c_I)
//============================================================================


struct  BFu16s_BFu8c_Ip  {
  unsigned short v1:16;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu16s_BFu8c_Ip) C1{ Fs:16 Fc:8 Fp}



static void Test_BFu16s_BFu8c_Ip()
{
  {
    init_simple_test("BFu16s_BFu8c_Ip");
    static STRUCT_IF_C BFu16s_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_Ip, BFu16s_BFu8c_Ip)
//============================================================================


struct  BFu16s_BFu8c_L  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu8c_L) C1{ Fs:16 Fc:8 FL}



static void Test_BFu16s_BFu8c_L()
{
  {
    init_simple_test("BFu16s_BFu8c_L");
    static STRUCT_IF_C BFu16s_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_L, BFu16s_BFu8c_L)
//============================================================================


struct  BFu16s_BFu8c_S  {
  unsigned short v1:16;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu16s_BFu8c_S) C1{ Fs:16 Fc:8 Fs}



static void Test_BFu16s_BFu8c_S()
{
  {
    init_simple_test("BFu16s_BFu8c_S");
    static STRUCT_IF_C BFu16s_BFu8c_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_S, BFu16s_BFu8c_S)
//============================================================================


struct  BFu16s_BFu8c_Uc  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu8c_Uc) C1{ Fs:16 Fc:8 Fc}



static void Test_BFu16s_BFu8c_Uc()
{
  {
    init_simple_test("BFu16s_BFu8c_Uc");
    static STRUCT_IF_C BFu16s_BFu8c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_Uc, BFu16s_BFu8c_Uc)
//============================================================================


struct  BFu16s_BFu8c_Ui  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu8c_Ui) C1{ Fs:16 Fc:8 Fi}



static void Test_BFu16s_BFu8c_Ui()
{
  {
    init_simple_test("BFu16s_BFu8c_Ui");
    static STRUCT_IF_C BFu16s_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_Ui, BFu16s_BFu8c_Ui)
//============================================================================


struct  BFu16s_BFu8c_Ul  {
  unsigned short v1:16;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu8c_Ul) C1{ Fs:16 Fc:8 FL}



static void Test_BFu16s_BFu8c_Ul()
{
  {
    init_simple_test("BFu16s_BFu8c_Ul");
    static STRUCT_IF_C BFu16s_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_Ul, BFu16s_BFu8c_Ul)
//============================================================================


struct  BFu16s_BFu8c_Us  {
  unsigned short v1:16;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu8c_Us) C1{ Fs:16 Fc:8 Fs}



static void Test_BFu16s_BFu8c_Us()
{
  {
    init_simple_test("BFu16s_BFu8c_Us");
    static STRUCT_IF_C BFu16s_BFu8c_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_Us, BFu16s_BFu8c_Us)
//============================================================================


struct  BFu16s_BFu8c_Vp  {
  unsigned short v1:16;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu16s_BFu8c_Vp) C1{ Fs:16 Fc:8 Fp}



static void Test_BFu16s_BFu8c_Vp()
{
  {
    init_simple_test("BFu16s_BFu8c_Vp");
    static STRUCT_IF_C BFu16s_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8c_Vp, BFu16s_BFu8c_Vp)
//============================================================================


struct  BFu16s_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu16s_BFu8i) C1{ Fs:16 Fi:8}



static void Test_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu8i");
    static STRUCT_IF_C BFu16s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i, BFu16s_BFu8i)
//============================================================================


struct  BFu16s_BFu8i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu8i_BFu15i) C1{ Fs:16 Fi:8 Fi:15}



static void Test_BFu16s_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu15i, BFu16s_BFu8i_BFu15i)
//============================================================================


struct  BFu16s_BFu8i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu8i_BFu15ll) C1{ Fs:16 Fi:8 FL:15}



static void Test_BFu16s_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu15ll, BFu16s_BFu8i_BFu15ll)
//============================================================================


struct  BFu16s_BFu8i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu8i_BFu15s) C1{ Fs:16 Fi:8 Fs:15}



static void Test_BFu16s_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu8i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu15s, BFu16s_BFu8i_BFu15s)
//============================================================================


struct  BFu16s_BFu8i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu8i_BFu16i) C1{ Fs:16 Fi:8 Fi:16}



static void Test_BFu16s_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu16i, BFu16s_BFu8i_BFu16i)
//============================================================================


struct  BFu16s_BFu8i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu8i_BFu16ll) C1{ Fs:16 Fi:8 FL:16}



static void Test_BFu16s_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu16ll, BFu16s_BFu8i_BFu16ll)
//============================================================================


struct  BFu16s_BFu8i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu8i_BFu16s) C1{ Fs:16 Fi:8 Fs:16}



static void Test_BFu16s_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu8i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu16s, BFu16s_BFu8i_BFu16s)
//============================================================================


struct  BFu16s_BFu8i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu8i_BFu17i) C1{ Fs:16 Fi:8 Fi:17}



static void Test_BFu16s_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu17i, BFu16s_BFu8i_BFu17i)
//============================================================================


struct  BFu16s_BFu8i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu8i_BFu17ll) C1{ Fs:16 Fi:8 FL:17}



static void Test_BFu16s_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu17ll, BFu16s_BFu8i_BFu17ll)
//============================================================================


struct  BFu16s_BFu8i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu8i_BFu1c) C1{ Fs:16 Fi:8 Fc:1}



static void Test_BFu16s_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu1c, BFu16s_BFu8i_BFu1c)
//============================================================================


struct  BFu16s_BFu8i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu8i_BFu1i) C1{ Fs:16 Fi:8 Fi:1}



static void Test_BFu16s_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu1i, BFu16s_BFu8i_BFu1i)
//============================================================================


struct  BFu16s_BFu8i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu8i_BFu1ll) C1{ Fs:16 Fi:8 FL:1}



static void Test_BFu16s_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu1ll, BFu16s_BFu8i_BFu1ll)
//============================================================================


struct  BFu16s_BFu8i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu8i_BFu1s) C1{ Fs:16 Fi:8 Fs:1}



static void Test_BFu16s_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu1s, BFu16s_BFu8i_BFu1s)
//============================================================================


struct  BFu16s_BFu8i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu8i_BFu31i) C1{ Fs:16 Fi:8 Fi:31}



static void Test_BFu16s_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu31i, BFu16s_BFu8i_BFu31i)
//============================================================================


struct  BFu16s_BFu8i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu8i_BFu31ll) C1{ Fs:16 Fi:8 FL:31}



static void Test_BFu16s_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu31ll, BFu16s_BFu8i_BFu31ll)
//============================================================================


struct  BFu16s_BFu8i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu8i_BFu32i) C1{ Fs:16 Fi:8 Fi:32}



static void Test_BFu16s_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu32i, BFu16s_BFu8i_BFu32i)
//============================================================================


struct  BFu16s_BFu8i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu8i_BFu32ll) C1{ Fs:16 Fi:8 FL:32}



static void Test_BFu16s_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu32ll, BFu16s_BFu8i_BFu32ll)
//============================================================================


struct  BFu16s_BFu8i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu8i_BFu33) C1{ Fs:16 Fi:8 FL:33}



static void Test_BFu16s_BFu8i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu33");
    static STRUCT_IF_C BFu16s_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16s_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu33, BFu16s_BFu8i_BFu33)
//============================================================================


struct  BFu16s_BFu8i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu8i_BFu7c) C1{ Fs:16 Fi:8 Fc:7}



static void Test_BFu16s_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu7c, BFu16s_BFu8i_BFu7c)
//============================================================================


struct  BFu16s_BFu8i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu8i_BFu7i) C1{ Fs:16 Fi:8 Fi:7}



static void Test_BFu16s_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu7i, BFu16s_BFu8i_BFu7i)
//============================================================================


struct  BFu16s_BFu8i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu8i_BFu7ll) C1{ Fs:16 Fi:8 FL:7}



static void Test_BFu16s_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu7ll, BFu16s_BFu8i_BFu7ll)
//============================================================================


struct  BFu16s_BFu8i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu8i_BFu7s) C1{ Fs:16 Fi:8 Fs:7}



static void Test_BFu16s_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu7s, BFu16s_BFu8i_BFu7s)
//============================================================================


struct  BFu16s_BFu8i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu8i_BFu8c) C1{ Fs:16 Fi:8 Fc:8}



static void Test_BFu16s_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu8c, BFu16s_BFu8i_BFu8c)
//============================================================================


struct  BFu16s_BFu8i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu8i_BFu8i) C1{ Fs:16 Fi:8 Fi:8}



static void Test_BFu16s_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu8i, BFu16s_BFu8i_BFu8i)
//============================================================================


struct  BFu16s_BFu8i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu8i_BFu8ll) C1{ Fs:16 Fi:8 FL:8}



static void Test_BFu16s_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu8ll, BFu16s_BFu8i_BFu8ll)
//============================================================================


struct  BFu16s_BFu8i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu8i_BFu8s) C1{ Fs:16 Fi:8 Fs:8}



static void Test_BFu16s_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu8s, BFu16s_BFu8i_BFu8s)
//============================================================================


struct  BFu16s_BFu8i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu8i_BFu9i) C1{ Fs:16 Fi:8 Fi:9}



static void Test_BFu16s_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu8i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu9i, BFu16s_BFu8i_BFu9i)
//============================================================================


struct  BFu16s_BFu8i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu8i_BFu9ll) C1{ Fs:16 Fi:8 FL:9}



static void Test_BFu16s_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu8i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu9ll, BFu16s_BFu8i_BFu9ll)
//============================================================================


struct  BFu16s_BFu8i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu8i_BFu9s) C1{ Fs:16 Fi:8 Fs:9}



static void Test_BFu16s_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu8i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu8i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_BFu9s, BFu16s_BFu8i_BFu9s)
//============================================================================


struct  BFu16s_BFu8i_C  {
  unsigned short v1:16;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu16s_BFu8i_C) C1{ Fs:16 Fi:8 Fc}



static void Test_BFu16s_BFu8i_C()
{
  {
    init_simple_test("BFu16s_BFu8i_C");
    static STRUCT_IF_C BFu16s_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_C, BFu16s_BFu8i_C)
//============================================================================


struct  BFu16s_BFu8i_D  {
  unsigned short v1:16;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu16s_BFu8i_D) C1{ Fs:16 Fi:8 FL}



static void Test_BFu16s_BFu8i_D()
{
  {
    init_simple_test("BFu16s_BFu8i_D");
    static STRUCT_IF_C BFu16s_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_D, BFu16s_BFu8i_D)
//============================================================================


struct  BFu16s_BFu8i_F  {
  unsigned short v1:16;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu16s_BFu8i_F) C1{ Fs:16 Fi:8 Fi}



static void Test_BFu16s_BFu8i_F()
{
  {
    init_simple_test("BFu16s_BFu8i_F");
    static STRUCT_IF_C BFu16s_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_F, BFu16s_BFu8i_F)
//============================================================================


struct  BFu16s_BFu8i_I  {
  unsigned short v1:16;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu16s_BFu8i_I) C1{ Fs:16 Fi:8 Fi}



static void Test_BFu16s_BFu8i_I()
{
  {
    init_simple_test("BFu16s_BFu8i_I");
    static STRUCT_IF_C BFu16s_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_I, BFu16s_BFu8i_I)
//============================================================================


struct  BFu16s_BFu8i_Ip  {
  unsigned short v1:16;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu16s_BFu8i_Ip) C1{ Fs:16 Fi:8 Fp}



static void Test_BFu16s_BFu8i_Ip()
{
  {
    init_simple_test("BFu16s_BFu8i_Ip");
    static STRUCT_IF_C BFu16s_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_Ip, BFu16s_BFu8i_Ip)
//============================================================================


struct  BFu16s_BFu8i_L  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu8i_L) C1{ Fs:16 Fi:8 FL}



static void Test_BFu16s_BFu8i_L()
{
  {
    init_simple_test("BFu16s_BFu8i_L");
    static STRUCT_IF_C BFu16s_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_L, BFu16s_BFu8i_L)
//============================================================================


struct  BFu16s_BFu8i_S  {
  unsigned short v1:16;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu16s_BFu8i_S) C1{ Fs:16 Fi:8 Fs}



static void Test_BFu16s_BFu8i_S()
{
  {
    init_simple_test("BFu16s_BFu8i_S");
    static STRUCT_IF_C BFu16s_BFu8i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_S, BFu16s_BFu8i_S)
//============================================================================


struct  BFu16s_BFu8i_Uc  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu8i_Uc) C1{ Fs:16 Fi:8 Fc}



static void Test_BFu16s_BFu8i_Uc()
{
  {
    init_simple_test("BFu16s_BFu8i_Uc");
    static STRUCT_IF_C BFu16s_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_Uc, BFu16s_BFu8i_Uc)
//============================================================================


struct  BFu16s_BFu8i_Ui  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu8i_Ui) C1{ Fs:16 Fi:8 Fi}



static void Test_BFu16s_BFu8i_Ui()
{
  {
    init_simple_test("BFu16s_BFu8i_Ui");
    static STRUCT_IF_C BFu16s_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_Ui, BFu16s_BFu8i_Ui)
//============================================================================


struct  BFu16s_BFu8i_Ul  {
  unsigned short v1:16;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu8i_Ul) C1{ Fs:16 Fi:8 FL}



static void Test_BFu16s_BFu8i_Ul()
{
  {
    init_simple_test("BFu16s_BFu8i_Ul");
    static STRUCT_IF_C BFu16s_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_Ul, BFu16s_BFu8i_Ul)
//============================================================================


struct  BFu16s_BFu8i_Us  {
  unsigned short v1:16;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu8i_Us) C1{ Fs:16 Fi:8 Fs}



static void Test_BFu16s_BFu8i_Us()
{
  {
    init_simple_test("BFu16s_BFu8i_Us");
    static STRUCT_IF_C BFu16s_BFu8i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_Us, BFu16s_BFu8i_Us)
//============================================================================


struct  BFu16s_BFu8i_Vp  {
  unsigned short v1:16;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu16s_BFu8i_Vp) C1{ Fs:16 Fi:8 Fp}



static void Test_BFu16s_BFu8i_Vp()
{
  {
    init_simple_test("BFu16s_BFu8i_Vp");
    static STRUCT_IF_C BFu16s_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8i_Vp, BFu16s_BFu8i_Vp)
//============================================================================


struct  BFu16s_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu16s_BFu8ll) C1{ Fs:16 FL:8}



static void Test_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll, BFu16s_BFu8ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu8ll_BFu15i) C1{ Fs:16 FL:8 Fi:15}



static void Test_BFu16s_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu15i, BFu16s_BFu8ll_BFu15i)
//============================================================================


struct  BFu16s_BFu8ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu8ll_BFu15ll) C1{ Fs:16 FL:8 FL:15}



static void Test_BFu16s_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu15ll, BFu16s_BFu8ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu8ll_BFu15s) C1{ Fs:16 FL:8 Fs:15}



static void Test_BFu16s_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu15s, BFu16s_BFu8ll_BFu15s)
//============================================================================


struct  BFu16s_BFu8ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu8ll_BFu16i) C1{ Fs:16 FL:8 Fi:16}



static void Test_BFu16s_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu16i, BFu16s_BFu8ll_BFu16i)
//============================================================================


struct  BFu16s_BFu8ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu8ll_BFu16ll) C1{ Fs:16 FL:8 FL:16}



static void Test_BFu16s_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu16ll, BFu16s_BFu8ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu8ll_BFu16s) C1{ Fs:16 FL:8 Fs:16}



static void Test_BFu16s_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu16s, BFu16s_BFu8ll_BFu16s)
//============================================================================


struct  BFu16s_BFu8ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu8ll_BFu17i) C1{ Fs:16 FL:8 Fi:17}



static void Test_BFu16s_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu17i, BFu16s_BFu8ll_BFu17i)
//============================================================================


struct  BFu16s_BFu8ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu8ll_BFu17ll) C1{ Fs:16 FL:8 FL:17}



static void Test_BFu16s_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu17ll, BFu16s_BFu8ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu8ll_BFu1c) C1{ Fs:16 FL:8 Fc:1}



static void Test_BFu16s_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu1c, BFu16s_BFu8ll_BFu1c)
//============================================================================


struct  BFu16s_BFu8ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu8ll_BFu1i) C1{ Fs:16 FL:8 Fi:1}



static void Test_BFu16s_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu1i, BFu16s_BFu8ll_BFu1i)
//============================================================================


struct  BFu16s_BFu8ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu8ll_BFu1ll) C1{ Fs:16 FL:8 FL:1}



static void Test_BFu16s_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu1ll, BFu16s_BFu8ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu8ll_BFu1s) C1{ Fs:16 FL:8 Fs:1}



static void Test_BFu16s_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu1s, BFu16s_BFu8ll_BFu1s)
//============================================================================


struct  BFu16s_BFu8ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu8ll_BFu31i) C1{ Fs:16 FL:8 Fi:31}



static void Test_BFu16s_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu31i, BFu16s_BFu8ll_BFu31i)
//============================================================================


struct  BFu16s_BFu8ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu8ll_BFu31ll) C1{ Fs:16 FL:8 FL:31}



static void Test_BFu16s_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu31ll, BFu16s_BFu8ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu8ll_BFu32i) C1{ Fs:16 FL:8 Fi:32}



static void Test_BFu16s_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu32i, BFu16s_BFu8ll_BFu32i)
//============================================================================


struct  BFu16s_BFu8ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu8ll_BFu32ll) C1{ Fs:16 FL:8 FL:32}



static void Test_BFu16s_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu32ll, BFu16s_BFu8ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu8ll_BFu33) C1{ Fs:16 FL:8 FL:33}



static void Test_BFu16s_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16s_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu33, BFu16s_BFu8ll_BFu33)
//============================================================================


struct  BFu16s_BFu8ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu8ll_BFu7c) C1{ Fs:16 FL:8 Fc:7}



static void Test_BFu16s_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu7c, BFu16s_BFu8ll_BFu7c)
//============================================================================


struct  BFu16s_BFu8ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu8ll_BFu7i) C1{ Fs:16 FL:8 Fi:7}



static void Test_BFu16s_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu7i, BFu16s_BFu8ll_BFu7i)
//============================================================================


struct  BFu16s_BFu8ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu8ll_BFu7ll) C1{ Fs:16 FL:8 FL:7}



static void Test_BFu16s_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu7ll, BFu16s_BFu8ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu8ll_BFu7s) C1{ Fs:16 FL:8 Fs:7}



static void Test_BFu16s_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu7s, BFu16s_BFu8ll_BFu7s)
//============================================================================


struct  BFu16s_BFu8ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu8ll_BFu8c) C1{ Fs:16 FL:8 Fc:8}



static void Test_BFu16s_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu8c, BFu16s_BFu8ll_BFu8c)
//============================================================================


struct  BFu16s_BFu8ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu8ll_BFu8i) C1{ Fs:16 FL:8 Fi:8}



static void Test_BFu16s_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu8i, BFu16s_BFu8ll_BFu8i)
//============================================================================


struct  BFu16s_BFu8ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu8ll_BFu8ll) C1{ Fs:16 FL:8 FL:8}



static void Test_BFu16s_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu8ll, BFu16s_BFu8ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu8ll_BFu8s) C1{ Fs:16 FL:8 Fs:8}



static void Test_BFu16s_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu8s, BFu16s_BFu8ll_BFu8s)
//============================================================================


struct  BFu16s_BFu8ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu8ll_BFu9i) C1{ Fs:16 FL:8 Fi:9}



static void Test_BFu16s_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu9i, BFu16s_BFu8ll_BFu9i)
//============================================================================


struct  BFu16s_BFu8ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu8ll_BFu9ll) C1{ Fs:16 FL:8 FL:9}



static void Test_BFu16s_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu9ll, BFu16s_BFu8ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu8ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu8ll_BFu9s) C1{ Fs:16 FL:8 Fs:9}



static void Test_BFu16s_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu8ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_BFu9s, BFu16s_BFu8ll_BFu9s)
//============================================================================


struct  BFu16s_BFu8ll_C  {
  unsigned short v1:16;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu16s_BFu8ll_C) C1{ Fs:16 FL:8 Fc}



static void Test_BFu16s_BFu8ll_C()
{
  {
    init_simple_test("BFu16s_BFu8ll_C");
    static STRUCT_IF_C BFu16s_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_C, BFu16s_BFu8ll_C)
//============================================================================


struct  BFu16s_BFu8ll_D  {
  unsigned short v1:16;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu16s_BFu8ll_D) C1{ Fs:16 FL:8 FL}



static void Test_BFu16s_BFu8ll_D()
{
  {
    init_simple_test("BFu16s_BFu8ll_D");
    static STRUCT_IF_C BFu16s_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_D, BFu16s_BFu8ll_D)
//============================================================================


struct  BFu16s_BFu8ll_F  {
  unsigned short v1:16;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu16s_BFu8ll_F) C1{ Fs:16 FL:8 Fi}



static void Test_BFu16s_BFu8ll_F()
{
  {
    init_simple_test("BFu16s_BFu8ll_F");
    static STRUCT_IF_C BFu16s_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_F, BFu16s_BFu8ll_F)
//============================================================================


struct  BFu16s_BFu8ll_I  {
  unsigned short v1:16;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu16s_BFu8ll_I) C1{ Fs:16 FL:8 Fi}



static void Test_BFu16s_BFu8ll_I()
{
  {
    init_simple_test("BFu16s_BFu8ll_I");
    static STRUCT_IF_C BFu16s_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_I, BFu16s_BFu8ll_I)
//============================================================================


struct  BFu16s_BFu8ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu16s_BFu8ll_Ip) C1{ Fs:16 FL:8 Fp}



static void Test_BFu16s_BFu8ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu8ll_Ip");
    static STRUCT_IF_C BFu16s_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_Ip, BFu16s_BFu8ll_Ip)
//============================================================================


struct  BFu16s_BFu8ll_L  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu8ll_L) C1{ Fs:16 FL:8 FL}



static void Test_BFu16s_BFu8ll_L()
{
  {
    init_simple_test("BFu16s_BFu8ll_L");
    static STRUCT_IF_C BFu16s_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_L, BFu16s_BFu8ll_L)
//============================================================================


struct  BFu16s_BFu8ll_S  {
  unsigned short v1:16;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu16s_BFu8ll_S) C1{ Fs:16 FL:8 Fs}



static void Test_BFu16s_BFu8ll_S()
{
  {
    init_simple_test("BFu16s_BFu8ll_S");
    static STRUCT_IF_C BFu16s_BFu8ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_S, BFu16s_BFu8ll_S)
//============================================================================


struct  BFu16s_BFu8ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu8ll_Uc) C1{ Fs:16 FL:8 Fc}



static void Test_BFu16s_BFu8ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu8ll_Uc");
    static STRUCT_IF_C BFu16s_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_Uc, BFu16s_BFu8ll_Uc)
//============================================================================


struct  BFu16s_BFu8ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu8ll_Ui) C1{ Fs:16 FL:8 Fi}



static void Test_BFu16s_BFu8ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu8ll_Ui");
    static STRUCT_IF_C BFu16s_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_Ui, BFu16s_BFu8ll_Ui)
//============================================================================


struct  BFu16s_BFu8ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu8ll_Ul) C1{ Fs:16 FL:8 FL}



static void Test_BFu16s_BFu8ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu8ll_Ul");
    static STRUCT_IF_C BFu16s_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_Ul, BFu16s_BFu8ll_Ul)
//============================================================================


struct  BFu16s_BFu8ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu8ll_Us) C1{ Fs:16 FL:8 Fs}



static void Test_BFu16s_BFu8ll_Us()
{
  {
    init_simple_test("BFu16s_BFu8ll_Us");
    static STRUCT_IF_C BFu16s_BFu8ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_Us, BFu16s_BFu8ll_Us)
//============================================================================


struct  BFu16s_BFu8ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu16s_BFu8ll_Vp) C1{ Fs:16 FL:8 Fp}



static void Test_BFu16s_BFu8ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu8ll_Vp");
    static STRUCT_IF_C BFu16s_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8ll_Vp, BFu16s_BFu8ll_Vp)
//============================================================================


struct  BFu16s_BFu8s  {
  unsigned short v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu16s_BFu8s) C1{ Fs:16 Fs:8}



static void Test_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu8s");
    static STRUCT_IF_C BFu16s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s, BFu16s_BFu8s)
//============================================================================


struct  BFu16s_BFu8s_BFu15i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu8s_BFu15i) C1{ Fs:16 Fs:8 Fi:15}



static void Test_BFu16s_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu15i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu15i, BFu16s_BFu8s_BFu15i)
//============================================================================


struct  BFu16s_BFu8s_BFu15ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu8s_BFu15ll) C1{ Fs:16 Fs:8 FL:15}



static void Test_BFu16s_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu15ll, BFu16s_BFu8s_BFu15ll)
//============================================================================


struct  BFu16s_BFu8s_BFu15s  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu8s_BFu15s) C1{ Fs:16 Fs:8 Fs:15}



static void Test_BFu16s_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu15s");
    static STRUCT_IF_C BFu16s_BFu8s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu15s, BFu16s_BFu8s_BFu15s)
//============================================================================


struct  BFu16s_BFu8s_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu8s_BFu16i) C1{ Fs:16 Fs:8 Fi:16}



static void Test_BFu16s_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu16i, BFu16s_BFu8s_BFu16i)
//============================================================================


struct  BFu16s_BFu8s_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu8s_BFu16ll) C1{ Fs:16 Fs:8 FL:16}



static void Test_BFu16s_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu16ll, BFu16s_BFu8s_BFu16ll)
//============================================================================


struct  BFu16s_BFu8s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu8s_BFu16s) C1{ Fs:16 Fs:8 Fs:16}



static void Test_BFu16s_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu8s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu16s, BFu16s_BFu8s_BFu16s)
//============================================================================


struct  BFu16s_BFu8s_BFu17i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu8s_BFu17i) C1{ Fs:16 Fs:8 Fi:17}



static void Test_BFu16s_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu17i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu17i, BFu16s_BFu8s_BFu17i)
//============================================================================


struct  BFu16s_BFu8s_BFu17ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu8s_BFu17ll) C1{ Fs:16 Fs:8 FL:17}



static void Test_BFu16s_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu17ll, BFu16s_BFu8s_BFu17ll)
//============================================================================


struct  BFu16s_BFu8s_BFu1c  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu8s_BFu1c) C1{ Fs:16 Fs:8 Fc:1}



static void Test_BFu16s_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu1c");
    static STRUCT_IF_C BFu16s_BFu8s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu1c, BFu16s_BFu8s_BFu1c)
//============================================================================


struct  BFu16s_BFu8s_BFu1i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu8s_BFu1i) C1{ Fs:16 Fs:8 Fi:1}



static void Test_BFu16s_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu1i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu1i, BFu16s_BFu8s_BFu1i)
//============================================================================


struct  BFu16s_BFu8s_BFu1ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu8s_BFu1ll) C1{ Fs:16 Fs:8 FL:1}



static void Test_BFu16s_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu1ll, BFu16s_BFu8s_BFu1ll)
//============================================================================


struct  BFu16s_BFu8s_BFu1s  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu8s_BFu1s) C1{ Fs:16 Fs:8 Fs:1}



static void Test_BFu16s_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu1s");
    static STRUCT_IF_C BFu16s_BFu8s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu1s, BFu16s_BFu8s_BFu1s)
//============================================================================


struct  BFu16s_BFu8s_BFu31i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu8s_BFu31i) C1{ Fs:16 Fs:8 Fi:31}



static void Test_BFu16s_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu31i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu31i, BFu16s_BFu8s_BFu31i)
//============================================================================


struct  BFu16s_BFu8s_BFu31ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu8s_BFu31ll) C1{ Fs:16 Fs:8 FL:31}



static void Test_BFu16s_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu31ll, BFu16s_BFu8s_BFu31ll)
//============================================================================


struct  BFu16s_BFu8s_BFu32i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu8s_BFu32i) C1{ Fs:16 Fs:8 Fi:32}



static void Test_BFu16s_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu32i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu32i, BFu16s_BFu8s_BFu32i)
//============================================================================


struct  BFu16s_BFu8s_BFu32ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu8s_BFu32ll) C1{ Fs:16 Fs:8 FL:32}



static void Test_BFu16s_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu32ll, BFu16s_BFu8s_BFu32ll)
//============================================================================


struct  BFu16s_BFu8s_BFu33  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu8s_BFu33) C1{ Fs:16 Fs:8 FL:33}



static void Test_BFu16s_BFu8s_BFu33()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu33");
    static STRUCT_IF_C BFu16s_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16s_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu33, BFu16s_BFu8s_BFu33)
//============================================================================


struct  BFu16s_BFu8s_BFu7c  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu8s_BFu7c) C1{ Fs:16 Fs:8 Fc:7}



static void Test_BFu16s_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu7c");
    static STRUCT_IF_C BFu16s_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu7c, BFu16s_BFu8s_BFu7c)
//============================================================================


struct  BFu16s_BFu8s_BFu7i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu8s_BFu7i) C1{ Fs:16 Fs:8 Fi:7}



static void Test_BFu16s_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu7i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu7i, BFu16s_BFu8s_BFu7i)
//============================================================================


struct  BFu16s_BFu8s_BFu7ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu8s_BFu7ll) C1{ Fs:16 Fs:8 FL:7}



static void Test_BFu16s_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu7ll, BFu16s_BFu8s_BFu7ll)
//============================================================================


struct  BFu16s_BFu8s_BFu7s  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu8s_BFu7s) C1{ Fs:16 Fs:8 Fs:7}



static void Test_BFu16s_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu7s");
    static STRUCT_IF_C BFu16s_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu7s, BFu16s_BFu8s_BFu7s)
//============================================================================


struct  BFu16s_BFu8s_BFu8c  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu8s_BFu8c) C1{ Fs:16 Fs:8 Fc:8}



static void Test_BFu16s_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu8c");
    static STRUCT_IF_C BFu16s_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu8c, BFu16s_BFu8s_BFu8c)
//============================================================================


struct  BFu16s_BFu8s_BFu8i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu8s_BFu8i) C1{ Fs:16 Fs:8 Fi:8}



static void Test_BFu16s_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu8i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu8i, BFu16s_BFu8s_BFu8i)
//============================================================================


struct  BFu16s_BFu8s_BFu8ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu8s_BFu8ll) C1{ Fs:16 Fs:8 FL:8}



static void Test_BFu16s_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu8ll, BFu16s_BFu8s_BFu8ll)
//============================================================================


struct  BFu16s_BFu8s_BFu8s  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu8s_BFu8s) C1{ Fs:16 Fs:8 Fs:8}



static void Test_BFu16s_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu8s");
    static STRUCT_IF_C BFu16s_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu8s, BFu16s_BFu8s_BFu8s)
//============================================================================


struct  BFu16s_BFu8s_BFu9i  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu8s_BFu9i) C1{ Fs:16 Fs:8 Fi:9}



static void Test_BFu16s_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu9i");
    static STRUCT_IF_C BFu16s_BFu8s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu9i, BFu16s_BFu8s_BFu9i)
//============================================================================


struct  BFu16s_BFu8s_BFu9ll  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu8s_BFu9ll) C1{ Fs:16 Fs:8 FL:9}



static void Test_BFu16s_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu8s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu9ll, BFu16s_BFu8s_BFu9ll)
//============================================================================


struct  BFu16s_BFu8s_BFu9s  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu8s_BFu9s) C1{ Fs:16 Fs:8 Fs:9}



static void Test_BFu16s_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu8s_BFu9s");
    static STRUCT_IF_C BFu16s_BFu8s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_BFu9s, BFu16s_BFu8s_BFu9s)
//============================================================================


struct  BFu16s_BFu8s_C  {
  unsigned short v1:16;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu16s_BFu8s_C) C1{ Fs:16 Fs:8 Fc}



static void Test_BFu16s_BFu8s_C()
{
  {
    init_simple_test("BFu16s_BFu8s_C");
    static STRUCT_IF_C BFu16s_BFu8s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_C");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_C, BFu16s_BFu8s_C)
//============================================================================


struct  BFu16s_BFu8s_D  {
  unsigned short v1:16;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu16s_BFu8s_D) C1{ Fs:16 Fs:8 FL}



static void Test_BFu16s_BFu8s_D()
{
  {
    init_simple_test("BFu16s_BFu8s_D");
    static STRUCT_IF_C BFu16s_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_D, BFu16s_BFu8s_D)
//============================================================================


struct  BFu16s_BFu8s_F  {
  unsigned short v1:16;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu16s_BFu8s_F) C1{ Fs:16 Fs:8 Fi}



static void Test_BFu16s_BFu8s_F()
{
  {
    init_simple_test("BFu16s_BFu8s_F");
    static STRUCT_IF_C BFu16s_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_F, BFu16s_BFu8s_F)
//============================================================================


struct  BFu16s_BFu8s_I  {
  unsigned short v1:16;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu16s_BFu8s_I) C1{ Fs:16 Fs:8 Fi}



static void Test_BFu16s_BFu8s_I()
{
  {
    init_simple_test("BFu16s_BFu8s_I");
    static STRUCT_IF_C BFu16s_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_I, BFu16s_BFu8s_I)
//============================================================================


struct  BFu16s_BFu8s_Ip  {
  unsigned short v1:16;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu16s_BFu8s_Ip) C1{ Fs:16 Fs:8 Fp}



static void Test_BFu16s_BFu8s_Ip()
{
  {
    init_simple_test("BFu16s_BFu8s_Ip");
    static STRUCT_IF_C BFu16s_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_Ip, BFu16s_BFu8s_Ip)
//============================================================================


struct  BFu16s_BFu8s_L  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu8s_L) C1{ Fs:16 Fs:8 FL}



static void Test_BFu16s_BFu8s_L()
{
  {
    init_simple_test("BFu16s_BFu8s_L");
    static STRUCT_IF_C BFu16s_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_L, BFu16s_BFu8s_L)
//============================================================================


struct  BFu16s_BFu8s_S  {
  unsigned short v1:16;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu16s_BFu8s_S) C1{ Fs:16 Fs:8 Fs}



static void Test_BFu16s_BFu8s_S()
{
  {
    init_simple_test("BFu16s_BFu8s_S");
    static STRUCT_IF_C BFu16s_BFu8s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_S, BFu16s_BFu8s_S)
//============================================================================


struct  BFu16s_BFu8s_Uc  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu8s_Uc) C1{ Fs:16 Fs:8 Fc}



static void Test_BFu16s_BFu8s_Uc()
{
  {
    init_simple_test("BFu16s_BFu8s_Uc");
    static STRUCT_IF_C BFu16s_BFu8s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_Uc");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_Uc, BFu16s_BFu8s_Uc)
//============================================================================


struct  BFu16s_BFu8s_Ui  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu8s_Ui) C1{ Fs:16 Fs:8 Fi}



static void Test_BFu16s_BFu8s_Ui()
{
  {
    init_simple_test("BFu16s_BFu8s_Ui");
    static STRUCT_IF_C BFu16s_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_Ui, BFu16s_BFu8s_Ui)
//============================================================================


struct  BFu16s_BFu8s_Ul  {
  unsigned short v1:16;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu8s_Ul) C1{ Fs:16 Fs:8 FL}



static void Test_BFu16s_BFu8s_Ul()
{
  {
    init_simple_test("BFu16s_BFu8s_Ul");
    static STRUCT_IF_C BFu16s_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_Ul, BFu16s_BFu8s_Ul)
//============================================================================


struct  BFu16s_BFu8s_Us  {
  unsigned short v1:16;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu8s_Us) C1{ Fs:16 Fs:8 Fs}



static void Test_BFu16s_BFu8s_Us()
{
  {
    init_simple_test("BFu16s_BFu8s_Us");
    static STRUCT_IF_C BFu16s_BFu8s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu8s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_Us, BFu16s_BFu8s_Us)
//============================================================================


struct  BFu16s_BFu8s_Vp  {
  unsigned short v1:16;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu16s_BFu8s_Vp) C1{ Fs:16 Fs:8 Fp}



static void Test_BFu16s_BFu8s_Vp()
{
  {
    init_simple_test("BFu16s_BFu8s_Vp");
    static STRUCT_IF_C BFu16s_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu8s_Vp, BFu16s_BFu8s_Vp)
//============================================================================


struct  BFu16s_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu16s_BFu9i) C1{ Fs:16 Fi:9}



static void Test_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu9i");
    static STRUCT_IF_C BFu16s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i, BFu16s_BFu9i)
//============================================================================


struct  BFu16s_BFu9i_BFu15i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu9i_BFu15i) C1{ Fs:16 Fi:9 Fi:15}



static void Test_BFu16s_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu15i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu15i, BFu16s_BFu9i_BFu15i)
//============================================================================


struct  BFu16s_BFu9i_BFu15ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu9i_BFu15ll) C1{ Fs:16 Fi:9 FL:15}



static void Test_BFu16s_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu16s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu15ll, BFu16s_BFu9i_BFu15ll)
//============================================================================


struct  BFu16s_BFu9i_BFu15s  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu9i_BFu15s) C1{ Fs:16 Fi:9 Fs:15}



static void Test_BFu16s_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu15s");
    static STRUCT_IF_C BFu16s_BFu9i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu15s, BFu16s_BFu9i_BFu15s)
//============================================================================


struct  BFu16s_BFu9i_BFu16i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu9i_BFu16i) C1{ Fs:16 Fi:9 Fi:16}



static void Test_BFu16s_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu16i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu16i, BFu16s_BFu9i_BFu16i)
//============================================================================


struct  BFu16s_BFu9i_BFu16ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu9i_BFu16ll) C1{ Fs:16 Fi:9 FL:16}



static void Test_BFu16s_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu16s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu16ll, BFu16s_BFu9i_BFu16ll)
//============================================================================


struct  BFu16s_BFu9i_BFu16s  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu9i_BFu16s) C1{ Fs:16 Fi:9 Fs:16}



static void Test_BFu16s_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu16s");
    static STRUCT_IF_C BFu16s_BFu9i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu16s, BFu16s_BFu9i_BFu16s)
//============================================================================


struct  BFu16s_BFu9i_BFu17i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu9i_BFu17i) C1{ Fs:16 Fi:9 Fi:17}



static void Test_BFu16s_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu17i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu17i, BFu16s_BFu9i_BFu17i)
//============================================================================


struct  BFu16s_BFu9i_BFu17ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu9i_BFu17ll) C1{ Fs:16 Fi:9 FL:17}



static void Test_BFu16s_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu16s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu17ll, BFu16s_BFu9i_BFu17ll)
//============================================================================


struct  BFu16s_BFu9i_BFu1c  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu9i_BFu1c) C1{ Fs:16 Fi:9 Fc:1}



static void Test_BFu16s_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu1c");
    static STRUCT_IF_C BFu16s_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu1c, BFu16s_BFu9i_BFu1c)
//============================================================================


struct  BFu16s_BFu9i_BFu1i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu9i_BFu1i) C1{ Fs:16 Fi:9 Fi:1}



static void Test_BFu16s_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu1i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu1i, BFu16s_BFu9i_BFu1i)
//============================================================================


struct  BFu16s_BFu9i_BFu1ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu9i_BFu1ll) C1{ Fs:16 Fi:9 FL:1}



static void Test_BFu16s_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu1ll, BFu16s_BFu9i_BFu1ll)
//============================================================================


struct  BFu16s_BFu9i_BFu1s  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu9i_BFu1s) C1{ Fs:16 Fi:9 Fs:1}



static void Test_BFu16s_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu1s");
    static STRUCT_IF_C BFu16s_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu1s, BFu16s_BFu9i_BFu1s)
//============================================================================


struct  BFu16s_BFu9i_BFu31i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu9i_BFu31i) C1{ Fs:16 Fi:9 Fi:31}



static void Test_BFu16s_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu31i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu31i, BFu16s_BFu9i_BFu31i)
//============================================================================


struct  BFu16s_BFu9i_BFu31ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu9i_BFu31ll) C1{ Fs:16 Fi:9 FL:31}



static void Test_BFu16s_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu16s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu31ll, BFu16s_BFu9i_BFu31ll)
//============================================================================


struct  BFu16s_BFu9i_BFu32i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu9i_BFu32i) C1{ Fs:16 Fi:9 Fi:32}



static void Test_BFu16s_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu32i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu32i, BFu16s_BFu9i_BFu32i)
//============================================================================


struct  BFu16s_BFu9i_BFu32ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu9i_BFu32ll) C1{ Fs:16 Fi:9 FL:32}



static void Test_BFu16s_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu16s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu16s_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu32ll, BFu16s_BFu9i_BFu32ll)
//============================================================================


struct  BFu16s_BFu9i_BFu33  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu9i_BFu33) C1{ Fs:16 Fi:9 FL:33}



static void Test_BFu16s_BFu9i_BFu33()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu33");
    static STRUCT_IF_C BFu16s_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu16s_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu16s_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu33, BFu16s_BFu9i_BFu33)
//============================================================================


struct  BFu16s_BFu9i_BFu7c  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu9i_BFu7c) C1{ Fs:16 Fi:9 Fc:7}



static void Test_BFu16s_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu7c");
    static STRUCT_IF_C BFu16s_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu7c, BFu16s_BFu9i_BFu7c)
//============================================================================


struct  BFu16s_BFu9i_BFu7i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu9i_BFu7i) C1{ Fs:16 Fi:9 Fi:7}



static void Test_BFu16s_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu7i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu7i, BFu16s_BFu9i_BFu7i)
//============================================================================


struct  BFu16s_BFu9i_BFu7ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu9i_BFu7ll) C1{ Fs:16 Fi:9 FL:7}



static void Test_BFu16s_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu7ll, BFu16s_BFu9i_BFu7ll)
//============================================================================


struct  BFu16s_BFu9i_BFu7s  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu9i_BFu7s) C1{ Fs:16 Fi:9 Fs:7}



static void Test_BFu16s_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu7s");
    static STRUCT_IF_C BFu16s_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu7s, BFu16s_BFu9i_BFu7s)
//============================================================================


struct  BFu16s_BFu9i_BFu8c  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu9i_BFu8c) C1{ Fs:16 Fi:9 Fc:8}



static void Test_BFu16s_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu8c");
    static STRUCT_IF_C BFu16s_BFu9i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu8c, BFu16s_BFu9i_BFu8c)
//============================================================================


struct  BFu16s_BFu9i_BFu8i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu9i_BFu8i) C1{ Fs:16 Fi:9 Fi:8}



static void Test_BFu16s_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu8i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu8i, BFu16s_BFu9i_BFu8i)
//============================================================================


struct  BFu16s_BFu9i_BFu8ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu9i_BFu8ll) C1{ Fs:16 Fi:9 FL:8}



static void Test_BFu16s_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu16s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu8ll, BFu16s_BFu9i_BFu8ll)
//============================================================================


struct  BFu16s_BFu9i_BFu8s  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu9i_BFu8s) C1{ Fs:16 Fi:9 Fs:8}



static void Test_BFu16s_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu8s");
    static STRUCT_IF_C BFu16s_BFu9i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu8s, BFu16s_BFu9i_BFu8s)
//============================================================================


struct  BFu16s_BFu9i_BFu9i  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu9i_BFu9i) C1{ Fs:16 Fi:9 Fi:9}



static void Test_BFu16s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu9i");
    static STRUCT_IF_C BFu16s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu9i, BFu16s_BFu9i_BFu9i)
//============================================================================


struct  BFu16s_BFu9i_BFu9ll  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu9i_BFu9ll) C1{ Fs:16 Fi:9 FL:9}



static void Test_BFu16s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu16s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu9ll, BFu16s_BFu9i_BFu9ll)
//============================================================================


struct  BFu16s_BFu9i_BFu9s  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu9i_BFu9s) C1{ Fs:16 Fi:9 Fs:9}



static void Test_BFu16s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu9i_BFu9s");
    static STRUCT_IF_C BFu16s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_BFu9s, BFu16s_BFu9i_BFu9s)
//============================================================================


struct  BFu16s_BFu9i_C  {
  unsigned short v1:16;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu16s_BFu9i_C) C1{ Fs:16 Fi:9 Fc}



static void Test_BFu16s_BFu9i_C()
{
  {
    init_simple_test("BFu16s_BFu9i_C");
    static STRUCT_IF_C BFu16s_BFu9i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_C");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_C, BFu16s_BFu9i_C)
//============================================================================


struct  BFu16s_BFu9i_D  {
  unsigned short v1:16;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu16s_BFu9i_D) C1{ Fs:16 Fi:9 FL}



static void Test_BFu16s_BFu9i_D()
{
  {
    init_simple_test("BFu16s_BFu9i_D");
    static STRUCT_IF_C BFu16s_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_D");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_D, BFu16s_BFu9i_D)
//============================================================================


struct  BFu16s_BFu9i_F  {
  unsigned short v1:16;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu16s_BFu9i_F) C1{ Fs:16 Fi:9 Fi}



static void Test_BFu16s_BFu9i_F()
{
  {
    init_simple_test("BFu16s_BFu9i_F");
    static STRUCT_IF_C BFu16s_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_F");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_F, BFu16s_BFu9i_F)
//============================================================================


struct  BFu16s_BFu9i_I  {
  unsigned short v1:16;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu16s_BFu9i_I) C1{ Fs:16 Fi:9 Fi}



static void Test_BFu16s_BFu9i_I()
{
  {
    init_simple_test("BFu16s_BFu9i_I");
    static STRUCT_IF_C BFu16s_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_I");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_I, BFu16s_BFu9i_I)
//============================================================================


struct  BFu16s_BFu9i_Ip  {
  unsigned short v1:16;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu16s_BFu9i_Ip) C1{ Fs:16 Fi:9 Fp}



static void Test_BFu16s_BFu9i_Ip()
{
  {
    init_simple_test("BFu16s_BFu9i_Ip");
    static STRUCT_IF_C BFu16s_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_Ip, BFu16s_BFu9i_Ip)
//============================================================================


struct  BFu16s_BFu9i_L  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu9i_L) C1{ Fs:16 Fi:9 FL}



static void Test_BFu16s_BFu9i_L()
{
  {
    init_simple_test("BFu16s_BFu9i_L");
    static STRUCT_IF_C BFu16s_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_L");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_L, BFu16s_BFu9i_L)
//============================================================================


struct  BFu16s_BFu9i_S  {
  unsigned short v1:16;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu16s_BFu9i_S) C1{ Fs:16 Fi:9 Fs}



static void Test_BFu16s_BFu9i_S()
{
  {
    init_simple_test("BFu16s_BFu9i_S");
    static STRUCT_IF_C BFu16s_BFu9i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_S");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_S, BFu16s_BFu9i_S)
//============================================================================


struct  BFu16s_BFu9i_Uc  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu9i_Uc) C1{ Fs:16 Fi:9 Fc}



static void Test_BFu16s_BFu9i_Uc()
{
  {
    init_simple_test("BFu16s_BFu9i_Uc");
    static STRUCT_IF_C BFu16s_BFu9i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_Uc, BFu16s_BFu9i_Uc)
//============================================================================


struct  BFu16s_BFu9i_Ui  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu9i_Ui) C1{ Fs:16 Fi:9 Fi}



static void Test_BFu16s_BFu9i_Ui()
{
  {
    init_simple_test("BFu16s_BFu9i_Ui");
    static STRUCT_IF_C BFu16s_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_Ui, BFu16s_BFu9i_Ui)
//============================================================================


struct  BFu16s_BFu9i_Ul  {
  unsigned short v1:16;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu9i_Ul) C1{ Fs:16 Fi:9 FL}



static void Test_BFu16s_BFu9i_Ul()
{
  {
    init_simple_test("BFu16s_BFu9i_Ul");
    static STRUCT_IF_C BFu16s_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_Ul, BFu16s_BFu9i_Ul)
//============================================================================


struct  BFu16s_BFu9i_Us  {
  unsigned short v1:16;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu9i_Us) C1{ Fs:16 Fi:9 Fs}



static void Test_BFu16s_BFu9i_Us()
{
  {
    init_simple_test("BFu16s_BFu9i_Us");
    static STRUCT_IF_C BFu16s_BFu9i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_Us, BFu16s_BFu9i_Us)
//============================================================================


struct  BFu16s_BFu9i_Vp  {
  unsigned short v1:16;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu16s_BFu9i_Vp) C1{ Fs:16 Fi:9 Fp}



static void Test_BFu16s_BFu9i_Vp()
{
  {
    init_simple_test("BFu16s_BFu9i_Vp");
    static STRUCT_IF_C BFu16s_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9i_Vp, BFu16s_BFu9i_Vp)
//============================================================================


struct  BFu16s_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu16s_BFu9ll) C1{ Fs:16 FL:9}



static void Test_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll, BFu16s_BFu9ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu15i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu9ll_BFu15i) C1{ Fs:16 FL:9 Fi:15}



static void Test_BFu16s_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu15i, BFu16s_BFu9ll_BFu15i)
//============================================================================


struct  BFu16s_BFu9ll_BFu15ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu9ll_BFu15ll) C1{ Fs:16 FL:9 FL:15}



static void Test_BFu16s_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu16s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu15ll, BFu16s_BFu9ll_BFu15ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu15s  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu9ll_BFu15s) C1{ Fs:16 FL:9 Fs:15}



static void Test_BFu16s_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu15s, BFu16s_BFu9ll_BFu15s)
//============================================================================


struct  BFu16s_BFu9ll_BFu16i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu9ll_BFu16i) C1{ Fs:16 FL:9 Fi:16}



static void Test_BFu16s_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu16i, BFu16s_BFu9ll_BFu16i)
//============================================================================


struct  BFu16s_BFu9ll_BFu16ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu9ll_BFu16ll) C1{ Fs:16 FL:9 FL:16}



static void Test_BFu16s_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu16s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu16ll, BFu16s_BFu9ll_BFu16ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu16s  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu9ll_BFu16s) C1{ Fs:16 FL:9 Fs:16}



static void Test_BFu16s_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu16s, BFu16s_BFu9ll_BFu16s)
//============================================================================


struct  BFu16s_BFu9ll_BFu17i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu9ll_BFu17i) C1{ Fs:16 FL:9 Fi:17}



static void Test_BFu16s_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu17i, BFu16s_BFu9ll_BFu17i)
//============================================================================


struct  BFu16s_BFu9ll_BFu17ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu9ll_BFu17ll) C1{ Fs:16 FL:9 FL:17}



static void Test_BFu16s_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu16s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu17ll, BFu16s_BFu9ll_BFu17ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu1c  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu9ll_BFu1c) C1{ Fs:16 FL:9 Fc:1}



static void Test_BFu16s_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu1c, BFu16s_BFu9ll_BFu1c)
//============================================================================


struct  BFu16s_BFu9ll_BFu1i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu9ll_BFu1i) C1{ Fs:16 FL:9 Fi:1}



static void Test_BFu16s_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu1i, BFu16s_BFu9ll_BFu1i)
//============================================================================


struct  BFu16s_BFu9ll_BFu1ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu9ll_BFu1ll) C1{ Fs:16 FL:9 FL:1}



static void Test_BFu16s_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu1ll, BFu16s_BFu9ll_BFu1ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu1s  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu9ll_BFu1s) C1{ Fs:16 FL:9 Fs:1}



static void Test_BFu16s_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu1s, BFu16s_BFu9ll_BFu1s)
//============================================================================


struct  BFu16s_BFu9ll_BFu31i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu9ll_BFu31i) C1{ Fs:16 FL:9 Fi:31}



static void Test_BFu16s_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu31i, BFu16s_BFu9ll_BFu31i)
//============================================================================


struct  BFu16s_BFu9ll_BFu31ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu9ll_BFu31ll) C1{ Fs:16 FL:9 FL:31}



static void Test_BFu16s_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu16s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu31ll, BFu16s_BFu9ll_BFu31ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu32i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu9ll_BFu32i) C1{ Fs:16 FL:9 Fi:32}



static void Test_BFu16s_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu32i, BFu16s_BFu9ll_BFu32i)
//============================================================================


struct  BFu16s_BFu9ll_BFu32ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu9ll_BFu32ll) C1{ Fs:16 FL:9 FL:32}



static void Test_BFu16s_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu16s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu16s_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu32ll, BFu16s_BFu9ll_BFu32ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu33  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu9ll_BFu33) C1{ Fs:16 FL:9 FL:33}



static void Test_BFu16s_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu33");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu16s_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu16s_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu33, BFu16s_BFu9ll_BFu33)
//============================================================================


struct  BFu16s_BFu9ll_BFu7c  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu9ll_BFu7c) C1{ Fs:16 FL:9 Fc:7}



static void Test_BFu16s_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu7c, BFu16s_BFu9ll_BFu7c)
//============================================================================


struct  BFu16s_BFu9ll_BFu7i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu9ll_BFu7i) C1{ Fs:16 FL:9 Fi:7}



static void Test_BFu16s_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu7i, BFu16s_BFu9ll_BFu7i)
//============================================================================


struct  BFu16s_BFu9ll_BFu7ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu9ll_BFu7ll) C1{ Fs:16 FL:9 FL:7}



static void Test_BFu16s_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu7ll, BFu16s_BFu9ll_BFu7ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu7s  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu9ll_BFu7s) C1{ Fs:16 FL:9 Fs:7}



static void Test_BFu16s_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu7s, BFu16s_BFu9ll_BFu7s)
//============================================================================


struct  BFu16s_BFu9ll_BFu8c  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu9ll_BFu8c) C1{ Fs:16 FL:9 Fc:8}



static void Test_BFu16s_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu8c, BFu16s_BFu9ll_BFu8c)
//============================================================================


struct  BFu16s_BFu9ll_BFu8i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu9ll_BFu8i) C1{ Fs:16 FL:9 Fi:8}



static void Test_BFu16s_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu8i, BFu16s_BFu9ll_BFu8i)
//============================================================================


struct  BFu16s_BFu9ll_BFu8ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu9ll_BFu8ll) C1{ Fs:16 FL:9 FL:8}



static void Test_BFu16s_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu16s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu8ll, BFu16s_BFu9ll_BFu8ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu8s  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu9ll_BFu8s) C1{ Fs:16 FL:9 Fs:8}



static void Test_BFu16s_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu8s, BFu16s_BFu9ll_BFu8s)
//============================================================================


struct  BFu16s_BFu9ll_BFu9i  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu9ll_BFu9i) C1{ Fs:16 FL:9 Fi:9}



static void Test_BFu16s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu9i, BFu16s_BFu9ll_BFu9i)
//============================================================================


struct  BFu16s_BFu9ll_BFu9ll  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu9ll_BFu9ll) C1{ Fs:16 FL:9 FL:9}



static void Test_BFu16s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu16s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu9ll, BFu16s_BFu9ll_BFu9ll)
//============================================================================


struct  BFu16s_BFu9ll_BFu9s  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu9ll_BFu9s) C1{ Fs:16 FL:9 Fs:9}



static void Test_BFu16s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu16s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_BFu9s, BFu16s_BFu9ll_BFu9s)
//============================================================================


struct  BFu16s_BFu9ll_C  {
  unsigned short v1:16;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu16s_BFu9ll_C) C1{ Fs:16 FL:9 Fc}



static void Test_BFu16s_BFu9ll_C()
{
  {
    init_simple_test("BFu16s_BFu9ll_C");
    static STRUCT_IF_C BFu16s_BFu9ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_C");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_C, BFu16s_BFu9ll_C)
//============================================================================


struct  BFu16s_BFu9ll_D  {
  unsigned short v1:16;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu16s_BFu9ll_D) C1{ Fs:16 FL:9 FL}



static void Test_BFu16s_BFu9ll_D()
{
  {
    init_simple_test("BFu16s_BFu9ll_D");
    static STRUCT_IF_C BFu16s_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_D");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_D, BFu16s_BFu9ll_D)
//============================================================================


struct  BFu16s_BFu9ll_F  {
  unsigned short v1:16;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu16s_BFu9ll_F) C1{ Fs:16 FL:9 Fi}



static void Test_BFu16s_BFu9ll_F()
{
  {
    init_simple_test("BFu16s_BFu9ll_F");
    static STRUCT_IF_C BFu16s_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_F");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_F, BFu16s_BFu9ll_F)
//============================================================================


struct  BFu16s_BFu9ll_I  {
  unsigned short v1:16;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu16s_BFu9ll_I) C1{ Fs:16 FL:9 Fi}



static void Test_BFu16s_BFu9ll_I()
{
  {
    init_simple_test("BFu16s_BFu9ll_I");
    static STRUCT_IF_C BFu16s_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_I");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_I, BFu16s_BFu9ll_I)
//============================================================================


struct  BFu16s_BFu9ll_Ip  {
  unsigned short v1:16;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu16s_BFu9ll_Ip) C1{ Fs:16 FL:9 Fp}



static void Test_BFu16s_BFu9ll_Ip()
{
  {
    init_simple_test("BFu16s_BFu9ll_Ip");
    static STRUCT_IF_C BFu16s_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_Ip, BFu16s_BFu9ll_Ip)
//============================================================================


struct  BFu16s_BFu9ll_L  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu9ll_L) C1{ Fs:16 FL:9 FL}



static void Test_BFu16s_BFu9ll_L()
{
  {
    init_simple_test("BFu16s_BFu9ll_L");
    static STRUCT_IF_C BFu16s_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_L");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_L, BFu16s_BFu9ll_L)
//============================================================================


struct  BFu16s_BFu9ll_S  {
  unsigned short v1:16;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu16s_BFu9ll_S) C1{ Fs:16 FL:9 Fs}



static void Test_BFu16s_BFu9ll_S()
{
  {
    init_simple_test("BFu16s_BFu9ll_S");
    static STRUCT_IF_C BFu16s_BFu9ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_S");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_S, BFu16s_BFu9ll_S)
//============================================================================


struct  BFu16s_BFu9ll_Uc  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu9ll_Uc) C1{ Fs:16 FL:9 Fc}



static void Test_BFu16s_BFu9ll_Uc()
{
  {
    init_simple_test("BFu16s_BFu9ll_Uc");
    static STRUCT_IF_C BFu16s_BFu9ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_Uc, BFu16s_BFu9ll_Uc)
//============================================================================


struct  BFu16s_BFu9ll_Ui  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu9ll_Ui) C1{ Fs:16 FL:9 Fi}



static void Test_BFu16s_BFu9ll_Ui()
{
  {
    init_simple_test("BFu16s_BFu9ll_Ui");
    static STRUCT_IF_C BFu16s_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_Ui, BFu16s_BFu9ll_Ui)
//============================================================================


struct  BFu16s_BFu9ll_Ul  {
  unsigned short v1:16;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu9ll_Ul) C1{ Fs:16 FL:9 FL}



static void Test_BFu16s_BFu9ll_Ul()
{
  {
    init_simple_test("BFu16s_BFu9ll_Ul");
    static STRUCT_IF_C BFu16s_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_Ul, BFu16s_BFu9ll_Ul)
//============================================================================


struct  BFu16s_BFu9ll_Us  {
  unsigned short v1:16;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu9ll_Us) C1{ Fs:16 FL:9 Fs}



static void Test_BFu16s_BFu9ll_Us()
{
  {
    init_simple_test("BFu16s_BFu9ll_Us");
    static STRUCT_IF_C BFu16s_BFu9ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_Us, BFu16s_BFu9ll_Us)
//============================================================================


struct  BFu16s_BFu9ll_Vp  {
  unsigned short v1:16;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu16s_BFu9ll_Vp) C1{ Fs:16 FL:9 Fp}



static void Test_BFu16s_BFu9ll_Vp()
{
  {
    init_simple_test("BFu16s_BFu9ll_Vp");
    static STRUCT_IF_C BFu16s_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9ll_Vp, BFu16s_BFu9ll_Vp)
//============================================================================


struct  BFu16s_BFu9s  {
  unsigned short v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu16s_BFu9s) C1{ Fs:16 Fs:9}



static void Test_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu9s");
    static STRUCT_IF_C BFu16s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s, BFu16s_BFu9s)
//============================================================================


struct  BFu16s_BFu9s_BFu15i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu16s_BFu9s_BFu15i) C1{ Fs:16 Fs:9 Fi:15}



static void Test_BFu16s_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu15i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu15i, BFu16s_BFu9s_BFu15i)
//============================================================================


struct  BFu16s_BFu9s_BFu15ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_BFu9s_BFu15ll) C1{ Fs:16 Fs:9 FL:15}



static void Test_BFu16s_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu16s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu16s_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu15ll, BFu16s_BFu9s_BFu15ll)
//============================================================================


struct  BFu16s_BFu9s_BFu15s  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu16s_BFu9s_BFu15s) C1{ Fs:16 Fs:9 Fs:15}



static void Test_BFu16s_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu15s");
    static STRUCT_IF_C BFu16s_BFu9s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu15s, BFu16s_BFu9s_BFu15s)
//============================================================================


struct  BFu16s_BFu9s_BFu16i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu16s_BFu9s_BFu16i) C1{ Fs:16 Fs:9 Fi:16}



static void Test_BFu16s_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu16i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu16i, BFu16s_BFu9s_BFu16i)
//============================================================================


struct  BFu16s_BFu9s_BFu16ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_BFu9s_BFu16ll) C1{ Fs:16 Fs:9 FL:16}



static void Test_BFu16s_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu16s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu16ll, BFu16s_BFu9s_BFu16ll)
//============================================================================


struct  BFu16s_BFu9s_BFu16s  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu16s_BFu9s_BFu16s) C1{ Fs:16 Fs:9 Fs:16}



static void Test_BFu16s_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu16s");
    static STRUCT_IF_C BFu16s_BFu9s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu16s, BFu16s_BFu9s_BFu16s)
//============================================================================


struct  BFu16s_BFu9s_BFu17i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu16s_BFu9s_BFu17i) C1{ Fs:16 Fs:9 Fi:17}



static void Test_BFu16s_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu17i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu17i, BFu16s_BFu9s_BFu17i)
//============================================================================


struct  BFu16s_BFu9s_BFu17ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_BFu9s_BFu17ll) C1{ Fs:16 Fs:9 FL:17}



static void Test_BFu16s_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu16s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu16s_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu17ll, BFu16s_BFu9s_BFu17ll)
//============================================================================


struct  BFu16s_BFu9s_BFu1c  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu16s_BFu9s_BFu1c) C1{ Fs:16 Fs:9 Fc:1}



static void Test_BFu16s_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu1c");
    static STRUCT_IF_C BFu16s_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu1c, BFu16s_BFu9s_BFu1c)
//============================================================================


struct  BFu16s_BFu9s_BFu1i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu16s_BFu9s_BFu1i) C1{ Fs:16 Fs:9 Fi:1}



static void Test_BFu16s_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu1i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu1i, BFu16s_BFu9s_BFu1i)
//============================================================================


struct  BFu16s_BFu9s_BFu1ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_BFu9s_BFu1ll) C1{ Fs:16 Fs:9 FL:1}



static void Test_BFu16s_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu1ll, BFu16s_BFu9s_BFu1ll)
//============================================================================


struct  BFu16s_BFu9s_BFu1s  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu16s_BFu9s_BFu1s) C1{ Fs:16 Fs:9 Fs:1}



static void Test_BFu16s_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu1s");
    static STRUCT_IF_C BFu16s_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu16s_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu1s, BFu16s_BFu9s_BFu1s)
//============================================================================


struct  BFu16s_BFu9s_BFu31i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu16s_BFu9s_BFu31i) C1{ Fs:16 Fs:9 Fi:31}



static void Test_BFu16s_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu31i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu31i, BFu16s_BFu9s_BFu31i)
//============================================================================


struct  BFu16s_BFu9s_BFu31ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_BFu9s_BFu31ll) C1{ Fs:16 Fs:9 FL:31}



static void Test_BFu16s_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu16s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu16s_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu31ll, BFu16s_BFu9s_BFu31ll)
//============================================================================


struct  BFu16s_BFu9s_BFu32i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu16s_BFu9s_BFu32i) C1{ Fs:16 Fs:9 Fi:32}



static void Test_BFu16s_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu32i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu32i, BFu16s_BFu9s_BFu32i)
//============================================================================


struct  BFu16s_BFu9s_BFu32ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_BFu9s_BFu32ll) C1{ Fs:16 Fs:9 FL:32}



static void Test_BFu16s_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu16s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu16s_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu32ll, BFu16s_BFu9s_BFu32ll)
//============================================================================


struct  BFu16s_BFu9s_BFu33  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_BFu9s_BFu33) C1{ Fs:16 Fs:9 FL:33}



static void Test_BFu16s_BFu9s_BFu33()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu33");
    static STRUCT_IF_C BFu16s_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu16s_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu16s_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu33, BFu16s_BFu9s_BFu33)
//============================================================================


struct  BFu16s_BFu9s_BFu7c  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu16s_BFu9s_BFu7c) C1{ Fs:16 Fs:9 Fc:7}



static void Test_BFu16s_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu7c");
    static STRUCT_IF_C BFu16s_BFu9s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu7c, BFu16s_BFu9s_BFu7c)
//============================================================================


struct  BFu16s_BFu9s_BFu7i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu16s_BFu9s_BFu7i) C1{ Fs:16 Fs:9 Fi:7}



static void Test_BFu16s_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu7i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu7i, BFu16s_BFu9s_BFu7i)
//============================================================================


struct  BFu16s_BFu9s_BFu7ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_BFu9s_BFu7ll) C1{ Fs:16 Fs:9 FL:7}



static void Test_BFu16s_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu7ll, BFu16s_BFu9s_BFu7ll)
//============================================================================


struct  BFu16s_BFu9s_BFu7s  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu16s_BFu9s_BFu7s) C1{ Fs:16 Fs:9 Fs:7}



static void Test_BFu16s_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu7s");
    static STRUCT_IF_C BFu16s_BFu9s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu16s_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu16s_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu7s, BFu16s_BFu9s_BFu7s)
//============================================================================


struct  BFu16s_BFu9s_BFu8c  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu16s_BFu9s_BFu8c) C1{ Fs:16 Fs:9 Fc:8}



static void Test_BFu16s_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu8c");
    static STRUCT_IF_C BFu16s_BFu9s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu8c, BFu16s_BFu9s_BFu8c)
//============================================================================


struct  BFu16s_BFu9s_BFu8i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu16s_BFu9s_BFu8i) C1{ Fs:16 Fs:9 Fi:8}



static void Test_BFu16s_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu8i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu8i, BFu16s_BFu9s_BFu8i)
//============================================================================


struct  BFu16s_BFu9s_BFu8ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_BFu9s_BFu8ll) C1{ Fs:16 Fs:9 FL:8}



static void Test_BFu16s_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu16s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu16s_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu8ll, BFu16s_BFu9s_BFu8ll)
//============================================================================


struct  BFu16s_BFu9s_BFu8s  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu16s_BFu9s_BFu8s) C1{ Fs:16 Fs:9 Fs:8}



static void Test_BFu16s_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu8s");
    static STRUCT_IF_C BFu16s_BFu9s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu8s, BFu16s_BFu9s_BFu8s)
//============================================================================


struct  BFu16s_BFu9s_BFu9i  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu16s_BFu9s_BFu9i) C1{ Fs:16 Fs:9 Fi:9}



static void Test_BFu16s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu9i");
    static STRUCT_IF_C BFu16s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu9i, BFu16s_BFu9s_BFu9i)
//============================================================================


struct  BFu16s_BFu9s_BFu9ll  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_BFu9s_BFu9ll) C1{ Fs:16 Fs:9 FL:9}



static void Test_BFu16s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu16s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu16s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu9ll, BFu16s_BFu9s_BFu9ll)
//============================================================================


struct  BFu16s_BFu9s_BFu9s  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu16s_BFu9s_BFu9s) C1{ Fs:16 Fs:9 Fs:9}



static void Test_BFu16s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu16s_BFu9s_BFu9s");
    static STRUCT_IF_C BFu16s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_BFu9s, BFu16s_BFu9s_BFu9s)
//============================================================================


struct  BFu16s_BFu9s_C  {
  unsigned short v1:16;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu16s_BFu9s_C) C1{ Fs:16 Fs:9 Fc}



static void Test_BFu16s_BFu9s_C()
{
  {
    init_simple_test("BFu16s_BFu9s_C");
    static STRUCT_IF_C BFu16s_BFu9s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_C");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_C, BFu16s_BFu9s_C)
//============================================================================


struct  BFu16s_BFu9s_D  {
  unsigned short v1:16;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu16s_BFu9s_D) C1{ Fs:16 Fs:9 FL}



static void Test_BFu16s_BFu9s_D()
{
  {
    init_simple_test("BFu16s_BFu9s_D");
    static STRUCT_IF_C BFu16s_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_D, BFu16s_BFu9s_D)
//============================================================================


struct  BFu16s_BFu9s_F  {
  unsigned short v1:16;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu16s_BFu9s_F) C1{ Fs:16 Fs:9 Fi}



static void Test_BFu16s_BFu9s_F()
{
  {
    init_simple_test("BFu16s_BFu9s_F");
    static STRUCT_IF_C BFu16s_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_F, BFu16s_BFu9s_F)
//============================================================================


struct  BFu16s_BFu9s_I  {
  unsigned short v1:16;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu16s_BFu9s_I) C1{ Fs:16 Fs:9 Fi}



static void Test_BFu16s_BFu9s_I()
{
  {
    init_simple_test("BFu16s_BFu9s_I");
    static STRUCT_IF_C BFu16s_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_I, BFu16s_BFu9s_I)
//============================================================================


struct  BFu16s_BFu9s_Ip  {
  unsigned short v1:16;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu16s_BFu9s_Ip) C1{ Fs:16 Fs:9 Fp}



static void Test_BFu16s_BFu9s_Ip()
{
  {
    init_simple_test("BFu16s_BFu9s_Ip");
    static STRUCT_IF_C BFu16s_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_Ip, BFu16s_BFu9s_Ip)
//============================================================================


struct  BFu16s_BFu9s_L  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu16s_BFu9s_L) C1{ Fs:16 Fs:9 FL}



static void Test_BFu16s_BFu9s_L()
{
  {
    init_simple_test("BFu16s_BFu9s_L");
    static STRUCT_IF_C BFu16s_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_L, BFu16s_BFu9s_L)
//============================================================================


struct  BFu16s_BFu9s_S  {
  unsigned short v1:16;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu16s_BFu9s_S) C1{ Fs:16 Fs:9 Fs}



static void Test_BFu16s_BFu9s_S()
{
  {
    init_simple_test("BFu16s_BFu9s_S");
    static STRUCT_IF_C BFu16s_BFu9s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_S");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_S, BFu16s_BFu9s_S)
//============================================================================


struct  BFu16s_BFu9s_Uc  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu16s_BFu9s_Uc) C1{ Fs:16 Fs:9 Fc}



static void Test_BFu16s_BFu9s_Uc()
{
  {
    init_simple_test("BFu16s_BFu9s_Uc");
    static STRUCT_IF_C BFu16s_BFu9s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_Uc");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_Uc, BFu16s_BFu9s_Uc)
//============================================================================


struct  BFu16s_BFu9s_Ui  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu16s_BFu9s_Ui) C1{ Fs:16 Fs:9 Fi}



static void Test_BFu16s_BFu9s_Ui()
{
  {
    init_simple_test("BFu16s_BFu9s_Ui");
    static STRUCT_IF_C BFu16s_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_Ui, BFu16s_BFu9s_Ui)
//============================================================================


struct  BFu16s_BFu9s_Ul  {
  unsigned short v1:16;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu16s_BFu9s_Ul) C1{ Fs:16 Fs:9 FL}



static void Test_BFu16s_BFu9s_Ul()
{
  {
    init_simple_test("BFu16s_BFu9s_Ul");
    static STRUCT_IF_C BFu16s_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_Ul, BFu16s_BFu9s_Ul)
//============================================================================


struct  BFu16s_BFu9s_Us  {
  unsigned short v1:16;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu16s_BFu9s_Us) C1{ Fs:16 Fs:9 Fs}



static void Test_BFu16s_BFu9s_Us()
{
  {
    init_simple_test("BFu16s_BFu9s_Us");
    static STRUCT_IF_C BFu16s_BFu9s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_Us");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_Us, BFu16s_BFu9s_Us)
//============================================================================


struct  BFu16s_BFu9s_Vp  {
  unsigned short v1:16;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu16s_BFu9s_Vp) C1{ Fs:16 Fs:9 Fp}



static void Test_BFu16s_BFu9s_Vp()
{
  {
    init_simple_test("BFu16s_BFu9s_Vp");
    static STRUCT_IF_C BFu16s_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_BFu9s_Vp, BFu16s_BFu9s_Vp)
//============================================================================


struct  BFu16s_C  {
  unsigned short v1:16;
  char v2;
};
//SIG(1 BFu16s_C) C1{ Fs:16 Fc}



static void Test_BFu16s_C()
{
  {
    init_simple_test("BFu16s_C");
    static STRUCT_IF_C BFu16s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C");
    check_field_offset(lv, v2, 2, "BFu16s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C, BFu16s_C)
//============================================================================


struct  BFu16s_C_BFu15i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_C_BFu15i) C1{ Fs:16 Fc Fi:15}



static void Test_BFu16s_C_BFu15i()
{
  {
    init_simple_test("BFu16s_C_BFu15i");
    static STRUCT_IF_C BFu16s_C_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_C_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu15i, BFu16s_C_BFu15i)
//============================================================================


struct  BFu16s_C_BFu15ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_C_BFu15ll) C1{ Fs:16 Fc FL:15}



static void Test_BFu16s_C_BFu15ll()
{
  {
    init_simple_test("BFu16s_C_BFu15ll");
    static STRUCT_IF_C BFu16s_C_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16s_C_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16s_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu15ll, BFu16s_C_BFu15ll)
//============================================================================


struct  BFu16s_C_BFu15s  {
  unsigned short v1:16;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_C_BFu15s) C1{ Fs:16 Fc Fs:15}



static void Test_BFu16s_C_BFu15s()
{
  {
    init_simple_test("BFu16s_C_BFu15s");
    static STRUCT_IF_C BFu16s_C_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_C_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu15s, BFu16s_C_BFu15s)
//============================================================================


struct  BFu16s_C_BFu16i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_C_BFu16i) C1{ Fs:16 Fc Fi:16}



static void Test_BFu16s_C_BFu16i()
{
  {
    init_simple_test("BFu16s_C_BFu16i");
    static STRUCT_IF_C BFu16s_C_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_C_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu16i, BFu16s_C_BFu16i)
//============================================================================


struct  BFu16s_C_BFu16ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_C_BFu16ll) C1{ Fs:16 Fc FL:16}



static void Test_BFu16s_C_BFu16ll()
{
  {
    init_simple_test("BFu16s_C_BFu16ll");
    static STRUCT_IF_C BFu16s_C_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16s_C_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu16ll, BFu16s_C_BFu16ll)
//============================================================================


struct  BFu16s_C_BFu16s  {
  unsigned short v1:16;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_C_BFu16s) C1{ Fs:16 Fc Fs:16}



static void Test_BFu16s_C_BFu16s()
{
  {
    init_simple_test("BFu16s_C_BFu16s");
    static STRUCT_IF_C BFu16s_C_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_C_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu16s, BFu16s_C_BFu16s)
//============================================================================


struct  BFu16s_C_BFu17i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_C_BFu17i) C1{ Fs:16 Fc Fi:17}



static void Test_BFu16s_C_BFu17i()
{
  {
    init_simple_test("BFu16s_C_BFu17i");
    static STRUCT_IF_C BFu16s_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu17i, BFu16s_C_BFu17i)
//============================================================================


struct  BFu16s_C_BFu17ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_C_BFu17ll) C1{ Fs:16 Fc FL:17}



static void Test_BFu16s_C_BFu17ll()
{
  {
    init_simple_test("BFu16s_C_BFu17ll");
    static STRUCT_IF_C BFu16s_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16s_C_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16s_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu17ll, BFu16s_C_BFu17ll)
//============================================================================


struct  BFu16s_C_BFu1c  {
  unsigned short v1:16;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_C_BFu1c) C1{ Fs:16 Fc Fc:1}



static void Test_BFu16s_C_BFu1c()
{
  {
    init_simple_test("BFu16s_C_BFu1c");
    static STRUCT_IF_C BFu16s_C_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu1c, BFu16s_C_BFu1c)
//============================================================================


struct  BFu16s_C_BFu1i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_C_BFu1i) C1{ Fs:16 Fc Fi:1}



static void Test_BFu16s_C_BFu1i()
{
  {
    init_simple_test("BFu16s_C_BFu1i");
    static STRUCT_IF_C BFu16s_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu1i, BFu16s_C_BFu1i)
//============================================================================


struct  BFu16s_C_BFu1ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_C_BFu1ll) C1{ Fs:16 Fc FL:1}



static void Test_BFu16s_C_BFu1ll()
{
  {
    init_simple_test("BFu16s_C_BFu1ll");
    static STRUCT_IF_C BFu16s_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu1ll, BFu16s_C_BFu1ll)
//============================================================================


struct  BFu16s_C_BFu1s  {
  unsigned short v1:16;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_C_BFu1s) C1{ Fs:16 Fc Fs:1}



static void Test_BFu16s_C_BFu1s()
{
  {
    init_simple_test("BFu16s_C_BFu1s");
    static STRUCT_IF_C BFu16s_C_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu1s, BFu16s_C_BFu1s)
//============================================================================


struct  BFu16s_C_BFu31i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_C_BFu31i) C1{ Fs:16 Fc Fi:31}



static void Test_BFu16s_C_BFu31i()
{
  {
    init_simple_test("BFu16s_C_BFu31i");
    static STRUCT_IF_C BFu16s_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu31i, BFu16s_C_BFu31i)
//============================================================================


struct  BFu16s_C_BFu31ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_C_BFu31ll) C1{ Fs:16 Fc FL:31}



static void Test_BFu16s_C_BFu31ll()
{
  {
    init_simple_test("BFu16s_C_BFu31ll");
    static STRUCT_IF_C BFu16s_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16s_C_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16s_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu31ll, BFu16s_C_BFu31ll)
//============================================================================


struct  BFu16s_C_BFu32i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_C_BFu32i) C1{ Fs:16 Fc Fi:32}



static void Test_BFu16s_C_BFu32i()
{
  {
    init_simple_test("BFu16s_C_BFu32i");
    static STRUCT_IF_C BFu16s_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu32i, BFu16s_C_BFu32i)
//============================================================================


struct  BFu16s_C_BFu32ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_C_BFu32ll) C1{ Fs:16 Fc FL:32}



static void Test_BFu16s_C_BFu32ll()
{
  {
    init_simple_test("BFu16s_C_BFu32ll");
    static STRUCT_IF_C BFu16s_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16s_C_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16s_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu32ll, BFu16s_C_BFu32ll)
//============================================================================


struct  BFu16s_C_BFu33  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_C_BFu33) C1{ Fs:16 Fc FL:33}



static void Test_BFu16s_C_BFu33()
{
  {
    init_simple_test("BFu16s_C_BFu33");
    static STRUCT_IF_C BFu16s_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu33");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16s_C_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16s_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu33, BFu16s_C_BFu33)
//============================================================================


struct  BFu16s_C_BFu7c  {
  unsigned short v1:16;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_C_BFu7c) C1{ Fs:16 Fc Fc:7}



static void Test_BFu16s_C_BFu7c()
{
  {
    init_simple_test("BFu16s_C_BFu7c");
    static STRUCT_IF_C BFu16s_C_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_C_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu7c, BFu16s_C_BFu7c)
//============================================================================


struct  BFu16s_C_BFu7i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_C_BFu7i) C1{ Fs:16 Fc Fi:7}



static void Test_BFu16s_C_BFu7i()
{
  {
    init_simple_test("BFu16s_C_BFu7i");
    static STRUCT_IF_C BFu16s_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_C_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu7i, BFu16s_C_BFu7i)
//============================================================================


struct  BFu16s_C_BFu7ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_C_BFu7ll) C1{ Fs:16 Fc FL:7}



static void Test_BFu16s_C_BFu7ll()
{
  {
    init_simple_test("BFu16s_C_BFu7ll");
    static STRUCT_IF_C BFu16s_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_C_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu7ll, BFu16s_C_BFu7ll)
//============================================================================


struct  BFu16s_C_BFu7s  {
  unsigned short v1:16;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_C_BFu7s) C1{ Fs:16 Fc Fs:7}



static void Test_BFu16s_C_BFu7s()
{
  {
    init_simple_test("BFu16s_C_BFu7s");
    static STRUCT_IF_C BFu16s_C_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_C_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu7s, BFu16s_C_BFu7s)
//============================================================================


struct  BFu16s_C_BFu8c  {
  unsigned short v1:16;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_C_BFu8c) C1{ Fs:16 Fc Fc:8}



static void Test_BFu16s_C_BFu8c()
{
  {
    init_simple_test("BFu16s_C_BFu8c");
    static STRUCT_IF_C BFu16s_C_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_C_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu8c, BFu16s_C_BFu8c)
//============================================================================


struct  BFu16s_C_BFu8i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_C_BFu8i) C1{ Fs:16 Fc Fi:8}



static void Test_BFu16s_C_BFu8i()
{
  {
    init_simple_test("BFu16s_C_BFu8i");
    static STRUCT_IF_C BFu16s_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_C_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu8i, BFu16s_C_BFu8i)
//============================================================================


struct  BFu16s_C_BFu8ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_C_BFu8ll) C1{ Fs:16 Fc FL:8}



static void Test_BFu16s_C_BFu8ll()
{
  {
    init_simple_test("BFu16s_C_BFu8ll");
    static STRUCT_IF_C BFu16s_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_C_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu8ll, BFu16s_C_BFu8ll)
//============================================================================


struct  BFu16s_C_BFu8s  {
  unsigned short v1:16;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_C_BFu8s) C1{ Fs:16 Fc Fs:8}



static void Test_BFu16s_C_BFu8s()
{
  {
    init_simple_test("BFu16s_C_BFu8s");
    static STRUCT_IF_C BFu16s_C_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_C_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu8s, BFu16s_C_BFu8s)
//============================================================================


struct  BFu16s_C_BFu9i  {
  unsigned short v1:16;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_C_BFu9i) C1{ Fs:16 Fc Fi:9}



static void Test_BFu16s_C_BFu9i()
{
  {
    init_simple_test("BFu16s_C_BFu9i");
    static STRUCT_IF_C BFu16s_C_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_C_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu9i, BFu16s_C_BFu9i)
//============================================================================


struct  BFu16s_C_BFu9ll  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_C_BFu9ll) C1{ Fs:16 Fc FL:9}



static void Test_BFu16s_C_BFu9ll()
{
  {
    init_simple_test("BFu16s_C_BFu9ll");
    static STRUCT_IF_C BFu16s_C_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16s_C_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16s_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu9ll, BFu16s_C_BFu9ll)
//============================================================================


struct  BFu16s_C_BFu9s  {
  unsigned short v1:16;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_C_BFu9s) C1{ Fs:16 Fc Fs:9}



static void Test_BFu16s_C_BFu9s()
{
  {
    init_simple_test("BFu16s_C_BFu9s");
    static STRUCT_IF_C BFu16s_C_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_C_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16s_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_C_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_BFu9s, BFu16s_C_BFu9s)
//============================================================================


struct  BFu16s_C_C  {
  unsigned short v1:16;
  char v2;
  char v3;
};
//SIG(1 BFu16s_C_C) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_C_C()
{
  {
    init_simple_test("BFu16s_C_C");
    static STRUCT_IF_C BFu16s_C_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_C");
    check_field_offset(lv, v2, 2, "BFu16s_C_C.v2");
    check_field_offset(lv, v3, 3, "BFu16s_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_C, BFu16s_C_C)
//============================================================================


struct  BFu16s_C_D  {
  unsigned short v1:16;
  char v2;
  double v3;
};
//SIG(1 BFu16s_C_D) C1{ Fs:16 Fc FL}



static void Test_BFu16s_C_D()
{
  {
    init_simple_test("BFu16s_C_D");
    static STRUCT_IF_C BFu16s_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_D");
    check_field_offset(lv, v2, 2, "BFu16s_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_D, BFu16s_C_D)
//============================================================================


struct  BFu16s_C_F  {
  unsigned short v1:16;
  char v2;
  float v3;
};
//SIG(1 BFu16s_C_F) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_C_F()
{
  {
    init_simple_test("BFu16s_C_F");
    static STRUCT_IF_C BFu16s_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_F");
    check_field_offset(lv, v2, 2, "BFu16s_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu16s_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_F, BFu16s_C_F)
//============================================================================


struct  BFu16s_C_I  {
  unsigned short v1:16;
  char v2;
  int v3;
};
//SIG(1 BFu16s_C_I) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_C_I()
{
  {
    init_simple_test("BFu16s_C_I");
    static STRUCT_IF_C BFu16s_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_I");
    check_field_offset(lv, v2, 2, "BFu16s_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu16s_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_I, BFu16s_C_I)
//============================================================================


struct  BFu16s_C_Ip  {
  unsigned short v1:16;
  char v2;
  int *v3;
};
//SIG(1 BFu16s_C_Ip) C1{ Fs:16 Fc Fp}



static void Test_BFu16s_C_Ip()
{
  {
    init_simple_test("BFu16s_C_Ip");
    static STRUCT_IF_C BFu16s_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_Ip");
    check_field_offset(lv, v2, 2, "BFu16s_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_Ip, BFu16s_C_Ip)
//============================================================================


struct  BFu16s_C_L  {
  unsigned short v1:16;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_C_L) C1{ Fs:16 Fc FL}



static void Test_BFu16s_C_L()
{
  {
    init_simple_test("BFu16s_C_L");
    static STRUCT_IF_C BFu16s_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_L");
    check_field_offset(lv, v2, 2, "BFu16s_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_L, BFu16s_C_L)
//============================================================================


struct  BFu16s_C_S  {
  unsigned short v1:16;
  char v2;
  short v3;
};
//SIG(1 BFu16s_C_S) C1{ Fs:16 Fc Fs}



static void Test_BFu16s_C_S()
{
  {
    init_simple_test("BFu16s_C_S");
    static STRUCT_IF_C BFu16s_C_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_C_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_S");
    check_field_offset(lv, v2, 2, "BFu16s_C_S.v2");
    check_field_offset(lv, v3, 4, "BFu16s_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_S, BFu16s_C_S)
//============================================================================


struct  BFu16s_C_Uc  {
  unsigned short v1:16;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu16s_C_Uc) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_C_Uc()
{
  {
    init_simple_test("BFu16s_C_Uc");
    static STRUCT_IF_C BFu16s_C_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_Uc");
    check_field_offset(lv, v2, 2, "BFu16s_C_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu16s_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_Uc, BFu16s_C_Uc)
//============================================================================


struct  BFu16s_C_Ui  {
  unsigned short v1:16;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu16s_C_Ui) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_C_Ui()
{
  {
    init_simple_test("BFu16s_C_Ui");
    static STRUCT_IF_C BFu16s_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_Ui");
    check_field_offset(lv, v2, 2, "BFu16s_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16s_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_Ui, BFu16s_C_Ui)
//============================================================================


struct  BFu16s_C_Ul  {
  unsigned short v1:16;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_C_Ul) C1{ Fs:16 Fc FL}



static void Test_BFu16s_C_Ul()
{
  {
    init_simple_test("BFu16s_C_Ul");
    static STRUCT_IF_C BFu16s_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_Ul");
    check_field_offset(lv, v2, 2, "BFu16s_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_Ul, BFu16s_C_Ul)
//============================================================================


struct  BFu16s_C_Us  {
  unsigned short v1:16;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu16s_C_Us) C1{ Fs:16 Fc Fs}



static void Test_BFu16s_C_Us()
{
  {
    init_simple_test("BFu16s_C_Us");
    static STRUCT_IF_C BFu16s_C_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_C_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_Us");
    check_field_offset(lv, v2, 2, "BFu16s_C_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16s_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_Us, BFu16s_C_Us)
//============================================================================


struct  BFu16s_C_Vp  {
  unsigned short v1:16;
  char v2;
  void *v3;
};
//SIG(1 BFu16s_C_Vp) C1{ Fs:16 Fc Fp}



static void Test_BFu16s_C_Vp()
{
  {
    init_simple_test("BFu16s_C_Vp");
    static STRUCT_IF_C BFu16s_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_Vp");
    check_field_offset(lv, v2, 2, "BFu16s_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_C_Vp, BFu16s_C_Vp)
//============================================================================


struct  BFu16s_D  {
  unsigned short v1:16;
  double v2;
};
//SIG(1 BFu16s_D) C1{ Fs:16 FL}



static void Test_BFu16s_D()
{
  {
    init_simple_test("BFu16s_D");
    static STRUCT_IF_C BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D, BFu16s_D)
//============================================================================


struct  BFu16s_D_BFu15i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_D_BFu15i) C1{ Fs:16 FL Fi:15}



static void Test_BFu16s_D_BFu15i()
{
  {
    init_simple_test("BFu16s_D_BFu15i");
    static STRUCT_IF_C BFu16s_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu15i, BFu16s_D_BFu15i)
//============================================================================


struct  BFu16s_D_BFu15ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_D_BFu15ll) C1{ Fs:16 FL FL:15}



static void Test_BFu16s_D_BFu15ll()
{
  {
    init_simple_test("BFu16s_D_BFu15ll");
    static STRUCT_IF_C BFu16s_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu15ll, BFu16s_D_BFu15ll)
//============================================================================


struct  BFu16s_D_BFu15s  {
  unsigned short v1:16;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_D_BFu15s) C1{ Fs:16 FL Fs:15}



static void Test_BFu16s_D_BFu15s()
{
  {
    init_simple_test("BFu16s_D_BFu15s");
    static STRUCT_IF_C BFu16s_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu15s, BFu16s_D_BFu15s)
//============================================================================


struct  BFu16s_D_BFu16i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_D_BFu16i) C1{ Fs:16 FL Fi:16}



static void Test_BFu16s_D_BFu16i()
{
  {
    init_simple_test("BFu16s_D_BFu16i");
    static STRUCT_IF_C BFu16s_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu16i, BFu16s_D_BFu16i)
//============================================================================


struct  BFu16s_D_BFu16ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_D_BFu16ll) C1{ Fs:16 FL FL:16}



static void Test_BFu16s_D_BFu16ll()
{
  {
    init_simple_test("BFu16s_D_BFu16ll");
    static STRUCT_IF_C BFu16s_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu16ll, BFu16s_D_BFu16ll)
//============================================================================


struct  BFu16s_D_BFu16s  {
  unsigned short v1:16;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_D_BFu16s) C1{ Fs:16 FL Fs:16}



static void Test_BFu16s_D_BFu16s()
{
  {
    init_simple_test("BFu16s_D_BFu16s");
    static STRUCT_IF_C BFu16s_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu16s, BFu16s_D_BFu16s)
//============================================================================


struct  BFu16s_D_BFu17i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_D_BFu17i) C1{ Fs:16 FL Fi:17}



static void Test_BFu16s_D_BFu17i()
{
  {
    init_simple_test("BFu16s_D_BFu17i");
    static STRUCT_IF_C BFu16s_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16s_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16s_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu17i, BFu16s_D_BFu17i)
//============================================================================


struct  BFu16s_D_BFu17ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_D_BFu17ll) C1{ Fs:16 FL FL:17}



static void Test_BFu16s_D_BFu17ll()
{
  {
    init_simple_test("BFu16s_D_BFu17ll");
    static STRUCT_IF_C BFu16s_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16s_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16s_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu17ll, BFu16s_D_BFu17ll)
//============================================================================


struct  BFu16s_D_BFu1c  {
  unsigned short v1:16;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_D_BFu1c) C1{ Fs:16 FL Fc:1}



static void Test_BFu16s_D_BFu1c()
{
  {
    init_simple_test("BFu16s_D_BFu1c");
    static STRUCT_IF_C BFu16s_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu1c, BFu16s_D_BFu1c)
//============================================================================


struct  BFu16s_D_BFu1i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_D_BFu1i) C1{ Fs:16 FL Fi:1}



static void Test_BFu16s_D_BFu1i()
{
  {
    init_simple_test("BFu16s_D_BFu1i");
    static STRUCT_IF_C BFu16s_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu1i, BFu16s_D_BFu1i)
//============================================================================


struct  BFu16s_D_BFu1ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_D_BFu1ll) C1{ Fs:16 FL FL:1}



static void Test_BFu16s_D_BFu1ll()
{
  {
    init_simple_test("BFu16s_D_BFu1ll");
    static STRUCT_IF_C BFu16s_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu1ll, BFu16s_D_BFu1ll)
//============================================================================


struct  BFu16s_D_BFu1s  {
  unsigned short v1:16;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_D_BFu1s) C1{ Fs:16 FL Fs:1}



static void Test_BFu16s_D_BFu1s()
{
  {
    init_simple_test("BFu16s_D_BFu1s");
    static STRUCT_IF_C BFu16s_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu1s, BFu16s_D_BFu1s)
//============================================================================


struct  BFu16s_D_BFu31i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_D_BFu31i) C1{ Fs:16 FL Fi:31}



static void Test_BFu16s_D_BFu31i()
{
  {
    init_simple_test("BFu16s_D_BFu31i");
    static STRUCT_IF_C BFu16s_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16s_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16s_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu31i, BFu16s_D_BFu31i)
//============================================================================


struct  BFu16s_D_BFu31ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_D_BFu31ll) C1{ Fs:16 FL FL:31}



static void Test_BFu16s_D_BFu31ll()
{
  {
    init_simple_test("BFu16s_D_BFu31ll");
    static STRUCT_IF_C BFu16s_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16s_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16s_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu31ll, BFu16s_D_BFu31ll)
//============================================================================


struct  BFu16s_D_BFu32i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_D_BFu32i) C1{ Fs:16 FL Fi:32}



static void Test_BFu16s_D_BFu32i()
{
  {
    init_simple_test("BFu16s_D_BFu32i");
    static STRUCT_IF_C BFu16s_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16s_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16s_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu32i, BFu16s_D_BFu32i)
//============================================================================


struct  BFu16s_D_BFu32ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_D_BFu32ll) C1{ Fs:16 FL FL:32}



static void Test_BFu16s_D_BFu32ll()
{
  {
    init_simple_test("BFu16s_D_BFu32ll");
    static STRUCT_IF_C BFu16s_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16s_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16s_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu32ll, BFu16s_D_BFu32ll)
//============================================================================


struct  BFu16s_D_BFu33  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_D_BFu33) C1{ Fs:16 FL FL:33}



static void Test_BFu16s_D_BFu33()
{
  {
    init_simple_test("BFu16s_D_BFu33");
    static STRUCT_IF_C BFu16s_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu16s_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu16s_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu33, BFu16s_D_BFu33)
//============================================================================


struct  BFu16s_D_BFu7c  {
  unsigned short v1:16;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_D_BFu7c) C1{ Fs:16 FL Fc:7}



static void Test_BFu16s_D_BFu7c()
{
  {
    init_simple_test("BFu16s_D_BFu7c");
    static STRUCT_IF_C BFu16s_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu7c, BFu16s_D_BFu7c)
//============================================================================


struct  BFu16s_D_BFu7i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_D_BFu7i) C1{ Fs:16 FL Fi:7}



static void Test_BFu16s_D_BFu7i()
{
  {
    init_simple_test("BFu16s_D_BFu7i");
    static STRUCT_IF_C BFu16s_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu7i, BFu16s_D_BFu7i)
//============================================================================


struct  BFu16s_D_BFu7ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_D_BFu7ll) C1{ Fs:16 FL FL:7}



static void Test_BFu16s_D_BFu7ll()
{
  {
    init_simple_test("BFu16s_D_BFu7ll");
    static STRUCT_IF_C BFu16s_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu7ll, BFu16s_D_BFu7ll)
//============================================================================


struct  BFu16s_D_BFu7s  {
  unsigned short v1:16;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_D_BFu7s) C1{ Fs:16 FL Fs:7}



static void Test_BFu16s_D_BFu7s()
{
  {
    init_simple_test("BFu16s_D_BFu7s");
    static STRUCT_IF_C BFu16s_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu7s, BFu16s_D_BFu7s)
//============================================================================


struct  BFu16s_D_BFu8c  {
  unsigned short v1:16;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_D_BFu8c) C1{ Fs:16 FL Fc:8}



static void Test_BFu16s_D_BFu8c()
{
  {
    init_simple_test("BFu16s_D_BFu8c");
    static STRUCT_IF_C BFu16s_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu8c, BFu16s_D_BFu8c)
//============================================================================


struct  BFu16s_D_BFu8i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_D_BFu8i) C1{ Fs:16 FL Fi:8}



static void Test_BFu16s_D_BFu8i()
{
  {
    init_simple_test("BFu16s_D_BFu8i");
    static STRUCT_IF_C BFu16s_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu8i, BFu16s_D_BFu8i)
//============================================================================


struct  BFu16s_D_BFu8ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_D_BFu8ll) C1{ Fs:16 FL FL:8}



static void Test_BFu16s_D_BFu8ll()
{
  {
    init_simple_test("BFu16s_D_BFu8ll");
    static STRUCT_IF_C BFu16s_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu8ll, BFu16s_D_BFu8ll)
//============================================================================


struct  BFu16s_D_BFu8s  {
  unsigned short v1:16;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_D_BFu8s) C1{ Fs:16 FL Fs:8}



static void Test_BFu16s_D_BFu8s()
{
  {
    init_simple_test("BFu16s_D_BFu8s");
    static STRUCT_IF_C BFu16s_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu8s, BFu16s_D_BFu8s)
//============================================================================


struct  BFu16s_D_BFu9i  {
  unsigned short v1:16;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_D_BFu9i) C1{ Fs:16 FL Fi:9}



static void Test_BFu16s_D_BFu9i()
{
  {
    init_simple_test("BFu16s_D_BFu9i");
    static STRUCT_IF_C BFu16s_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu9i, BFu16s_D_BFu9i)
//============================================================================


struct  BFu16s_D_BFu9ll  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_D_BFu9ll) C1{ Fs:16 FL FL:9}



static void Test_BFu16s_D_BFu9ll()
{
  {
    init_simple_test("BFu16s_D_BFu9ll");
    static STRUCT_IF_C BFu16s_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu9ll, BFu16s_D_BFu9ll)
//============================================================================


struct  BFu16s_D_BFu9s  {
  unsigned short v1:16;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_D_BFu9s) C1{ Fs:16 FL Fs:9}



static void Test_BFu16s_D_BFu9s()
{
  {
    init_simple_test("BFu16s_D_BFu9s");
    static STRUCT_IF_C BFu16s_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_BFu9s, BFu16s_D_BFu9s)
//============================================================================


struct  BFu16s_D_C  {
  unsigned short v1:16;
  double v2;
  char v3;
};
//SIG(1 BFu16s_D_C) C1{ Fs:16 FL Fc}



static void Test_BFu16s_D_C()
{
  {
    init_simple_test("BFu16s_D_C");
    static STRUCT_IF_C BFu16s_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_C, BFu16s_D_C)
//============================================================================


struct  BFu16s_D_D  {
  unsigned short v1:16;
  double v2;
  double v3;
};
//SIG(1 BFu16s_D_D) C1{ Fs:16 FL[2]}



static void Test_BFu16s_D_D()
{
  {
    init_simple_test("BFu16s_D_D");
    static STRUCT_IF_C BFu16s_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_D, BFu16s_D_D)
//============================================================================


struct  BFu16s_D_F  {
  unsigned short v1:16;
  double v2;
  float v3;
};
//SIG(1 BFu16s_D_F) C1{ Fs:16 FL Fi}



static void Test_BFu16s_D_F()
{
  {
    init_simple_test("BFu16s_D_F");
    static STRUCT_IF_C BFu16s_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_F, BFu16s_D_F)
//============================================================================


struct  BFu16s_D_I  {
  unsigned short v1:16;
  double v2;
  int v3;
};
//SIG(1 BFu16s_D_I) C1{ Fs:16 FL Fi}



static void Test_BFu16s_D_I()
{
  {
    init_simple_test("BFu16s_D_I");
    static STRUCT_IF_C BFu16s_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_I, BFu16s_D_I)
//============================================================================


struct  BFu16s_D_Ip  {
  unsigned short v1:16;
  double v2;
  int *v3;
};
//SIG(1 BFu16s_D_Ip) C1{ Fs:16 FL Fp}



static void Test_BFu16s_D_Ip()
{
  {
    init_simple_test("BFu16s_D_Ip");
    static STRUCT_IF_C BFu16s_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_Ip, BFu16s_D_Ip)
//============================================================================


struct  BFu16s_D_L  {
  unsigned short v1:16;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_D_L) C1{ Fs:16 FL[2]}



static void Test_BFu16s_D_L()
{
  {
    init_simple_test("BFu16s_D_L");
    static STRUCT_IF_C BFu16s_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_L, BFu16s_D_L)
//============================================================================


struct  BFu16s_D_S  {
  unsigned short v1:16;
  double v2;
  short v3;
};
//SIG(1 BFu16s_D_S) C1{ Fs:16 FL Fs}



static void Test_BFu16s_D_S()
{
  {
    init_simple_test("BFu16s_D_S");
    static STRUCT_IF_C BFu16s_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_S, BFu16s_D_S)
//============================================================================


struct  BFu16s_D_Uc  {
  unsigned short v1:16;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu16s_D_Uc) C1{ Fs:16 FL Fc}



static void Test_BFu16s_D_Uc()
{
  {
    init_simple_test("BFu16s_D_Uc");
    static STRUCT_IF_C BFu16s_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_Uc, BFu16s_D_Uc)
//============================================================================


struct  BFu16s_D_Ui  {
  unsigned short v1:16;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu16s_D_Ui) C1{ Fs:16 FL Fi}



static void Test_BFu16s_D_Ui()
{
  {
    init_simple_test("BFu16s_D_Ui");
    static STRUCT_IF_C BFu16s_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_Ui, BFu16s_D_Ui)
//============================================================================


struct  BFu16s_D_Ul  {
  unsigned short v1:16;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_D_Ul) C1{ Fs:16 FL[2]}



static void Test_BFu16s_D_Ul()
{
  {
    init_simple_test("BFu16s_D_Ul");
    static STRUCT_IF_C BFu16s_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_Ul, BFu16s_D_Ul)
//============================================================================


struct  BFu16s_D_Us  {
  unsigned short v1:16;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu16s_D_Us) C1{ Fs:16 FL Fs}



static void Test_BFu16s_D_Us()
{
  {
    init_simple_test("BFu16s_D_Us");
    static STRUCT_IF_C BFu16s_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_Us, BFu16s_D_Us)
//============================================================================


struct  BFu16s_D_Vp  {
  unsigned short v1:16;
  double v2;
  void *v3;
};
//SIG(1 BFu16s_D_Vp) C1{ Fs:16 FL Fp}



static void Test_BFu16s_D_Vp()
{
  {
    init_simple_test("BFu16s_D_Vp");
    static STRUCT_IF_C BFu16s_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_D_Vp, BFu16s_D_Vp)
//============================================================================


struct  BFu16s_F  {
  unsigned short v1:16;
  float v2;
};
//SIG(1 BFu16s_F) C1{ Fs:16 Fi}



static void Test_BFu16s_F()
{
  {
    init_simple_test("BFu16s_F");
    static STRUCT_IF_C BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F");
    check_field_offset(lv, v2, 4, "BFu16s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F, BFu16s_F)
//============================================================================


struct  BFu16s_F_BFu15i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_F_BFu15i) C1{ Fs:16 Fi Fi:15}



static void Test_BFu16s_F_BFu15i()
{
  {
    init_simple_test("BFu16s_F_BFu15i");
    static STRUCT_IF_C BFu16s_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu15i, BFu16s_F_BFu15i)
//============================================================================


struct  BFu16s_F_BFu15ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_F_BFu15ll) C1{ Fs:16 Fi FL:15}



static void Test_BFu16s_F_BFu15ll()
{
  {
    init_simple_test("BFu16s_F_BFu15ll");
    static STRUCT_IF_C BFu16s_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu15ll, BFu16s_F_BFu15ll)
//============================================================================


struct  BFu16s_F_BFu15s  {
  unsigned short v1:16;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_F_BFu15s) C1{ Fs:16 Fi Fs:15}



static void Test_BFu16s_F_BFu15s()
{
  {
    init_simple_test("BFu16s_F_BFu15s");
    static STRUCT_IF_C BFu16s_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu15s, BFu16s_F_BFu15s)
//============================================================================


struct  BFu16s_F_BFu16i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_F_BFu16i) C1{ Fs:16 Fi Fi:16}



static void Test_BFu16s_F_BFu16i()
{
  {
    init_simple_test("BFu16s_F_BFu16i");
    static STRUCT_IF_C BFu16s_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu16i, BFu16s_F_BFu16i)
//============================================================================


struct  BFu16s_F_BFu16ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_F_BFu16ll) C1{ Fs:16 Fi FL:16}



static void Test_BFu16s_F_BFu16ll()
{
  {
    init_simple_test("BFu16s_F_BFu16ll");
    static STRUCT_IF_C BFu16s_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu16ll, BFu16s_F_BFu16ll)
//============================================================================


struct  BFu16s_F_BFu16s  {
  unsigned short v1:16;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_F_BFu16s) C1{ Fs:16 Fi Fs:16}



static void Test_BFu16s_F_BFu16s()
{
  {
    init_simple_test("BFu16s_F_BFu16s");
    static STRUCT_IF_C BFu16s_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu16s, BFu16s_F_BFu16s)
//============================================================================


struct  BFu16s_F_BFu17i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_F_BFu17i) C1{ Fs:16 Fi Fi:17}



static void Test_BFu16s_F_BFu17i()
{
  {
    init_simple_test("BFu16s_F_BFu17i");
    static STRUCT_IF_C BFu16s_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu17i, BFu16s_F_BFu17i)
//============================================================================


struct  BFu16s_F_BFu17ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_F_BFu17ll) C1{ Fs:16 Fi FL:17}



static void Test_BFu16s_F_BFu17ll()
{
  {
    init_simple_test("BFu16s_F_BFu17ll");
    static STRUCT_IF_C BFu16s_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu17ll, BFu16s_F_BFu17ll)
//============================================================================


struct  BFu16s_F_BFu1c  {
  unsigned short v1:16;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_F_BFu1c) C1{ Fs:16 Fi Fc:1}



static void Test_BFu16s_F_BFu1c()
{
  {
    init_simple_test("BFu16s_F_BFu1c");
    static STRUCT_IF_C BFu16s_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu1c, BFu16s_F_BFu1c)
//============================================================================


struct  BFu16s_F_BFu1i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_F_BFu1i) C1{ Fs:16 Fi Fi:1}



static void Test_BFu16s_F_BFu1i()
{
  {
    init_simple_test("BFu16s_F_BFu1i");
    static STRUCT_IF_C BFu16s_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu1i, BFu16s_F_BFu1i)
//============================================================================


struct  BFu16s_F_BFu1ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_F_BFu1ll) C1{ Fs:16 Fi FL:1}



static void Test_BFu16s_F_BFu1ll()
{
  {
    init_simple_test("BFu16s_F_BFu1ll");
    static STRUCT_IF_C BFu16s_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu1ll, BFu16s_F_BFu1ll)
//============================================================================


struct  BFu16s_F_BFu1s  {
  unsigned short v1:16;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_F_BFu1s) C1{ Fs:16 Fi Fs:1}



static void Test_BFu16s_F_BFu1s()
{
  {
    init_simple_test("BFu16s_F_BFu1s");
    static STRUCT_IF_C BFu16s_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu1s, BFu16s_F_BFu1s)
//============================================================================


struct  BFu16s_F_BFu31i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_F_BFu31i) C1{ Fs:16 Fi Fi:31}



static void Test_BFu16s_F_BFu31i()
{
  {
    init_simple_test("BFu16s_F_BFu31i");
    static STRUCT_IF_C BFu16s_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu31i, BFu16s_F_BFu31i)
//============================================================================


struct  BFu16s_F_BFu31ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_F_BFu31ll) C1{ Fs:16 Fi FL:31}



static void Test_BFu16s_F_BFu31ll()
{
  {
    init_simple_test("BFu16s_F_BFu31ll");
    static STRUCT_IF_C BFu16s_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu31ll, BFu16s_F_BFu31ll)
//============================================================================


struct  BFu16s_F_BFu32i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_F_BFu32i) C1{ Fs:16 Fi Fi:32}



static void Test_BFu16s_F_BFu32i()
{
  {
    init_simple_test("BFu16s_F_BFu32i");
    static STRUCT_IF_C BFu16s_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu32i, BFu16s_F_BFu32i)
//============================================================================


struct  BFu16s_F_BFu32ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_F_BFu32ll) C1{ Fs:16 Fi FL:32}



static void Test_BFu16s_F_BFu32ll()
{
  {
    init_simple_test("BFu16s_F_BFu32ll");
    static STRUCT_IF_C BFu16s_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu32ll, BFu16s_F_BFu32ll)
//============================================================================


struct  BFu16s_F_BFu33  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_F_BFu33) C1{ Fs:16 Fi FL:33}



static void Test_BFu16s_F_BFu33()
{
  {
    init_simple_test("BFu16s_F_BFu33");
    static STRUCT_IF_C BFu16s_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu16s_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu16s_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu33, BFu16s_F_BFu33)
//============================================================================


struct  BFu16s_F_BFu7c  {
  unsigned short v1:16;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_F_BFu7c) C1{ Fs:16 Fi Fc:7}



static void Test_BFu16s_F_BFu7c()
{
  {
    init_simple_test("BFu16s_F_BFu7c");
    static STRUCT_IF_C BFu16s_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu7c, BFu16s_F_BFu7c)
//============================================================================


struct  BFu16s_F_BFu7i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_F_BFu7i) C1{ Fs:16 Fi Fi:7}



static void Test_BFu16s_F_BFu7i()
{
  {
    init_simple_test("BFu16s_F_BFu7i");
    static STRUCT_IF_C BFu16s_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu7i, BFu16s_F_BFu7i)
//============================================================================


struct  BFu16s_F_BFu7ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_F_BFu7ll) C1{ Fs:16 Fi FL:7}



static void Test_BFu16s_F_BFu7ll()
{
  {
    init_simple_test("BFu16s_F_BFu7ll");
    static STRUCT_IF_C BFu16s_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu7ll, BFu16s_F_BFu7ll)
//============================================================================


struct  BFu16s_F_BFu7s  {
  unsigned short v1:16;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_F_BFu7s) C1{ Fs:16 Fi Fs:7}



static void Test_BFu16s_F_BFu7s()
{
  {
    init_simple_test("BFu16s_F_BFu7s");
    static STRUCT_IF_C BFu16s_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu7s, BFu16s_F_BFu7s)
//============================================================================


struct  BFu16s_F_BFu8c  {
  unsigned short v1:16;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_F_BFu8c) C1{ Fs:16 Fi Fc:8}



static void Test_BFu16s_F_BFu8c()
{
  {
    init_simple_test("BFu16s_F_BFu8c");
    static STRUCT_IF_C BFu16s_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu8c, BFu16s_F_BFu8c)
//============================================================================


struct  BFu16s_F_BFu8i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_F_BFu8i) C1{ Fs:16 Fi Fi:8}



static void Test_BFu16s_F_BFu8i()
{
  {
    init_simple_test("BFu16s_F_BFu8i");
    static STRUCT_IF_C BFu16s_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu8i, BFu16s_F_BFu8i)
//============================================================================


struct  BFu16s_F_BFu8ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_F_BFu8ll) C1{ Fs:16 Fi FL:8}



static void Test_BFu16s_F_BFu8ll()
{
  {
    init_simple_test("BFu16s_F_BFu8ll");
    static STRUCT_IF_C BFu16s_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu8ll, BFu16s_F_BFu8ll)
//============================================================================


struct  BFu16s_F_BFu8s  {
  unsigned short v1:16;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_F_BFu8s) C1{ Fs:16 Fi Fs:8}



static void Test_BFu16s_F_BFu8s()
{
  {
    init_simple_test("BFu16s_F_BFu8s");
    static STRUCT_IF_C BFu16s_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu8s, BFu16s_F_BFu8s)
//============================================================================


struct  BFu16s_F_BFu9i  {
  unsigned short v1:16;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_F_BFu9i) C1{ Fs:16 Fi Fi:9}



static void Test_BFu16s_F_BFu9i()
{
  {
    init_simple_test("BFu16s_F_BFu9i");
    static STRUCT_IF_C BFu16s_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu9i, BFu16s_F_BFu9i)
//============================================================================


struct  BFu16s_F_BFu9ll  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_F_BFu9ll) C1{ Fs:16 Fi FL:9}



static void Test_BFu16s_F_BFu9ll()
{
  {
    init_simple_test("BFu16s_F_BFu9ll");
    static STRUCT_IF_C BFu16s_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu9ll, BFu16s_F_BFu9ll)
//============================================================================


struct  BFu16s_F_BFu9s  {
  unsigned short v1:16;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_F_BFu9s) C1{ Fs:16 Fi Fs:9}



static void Test_BFu16s_F_BFu9s()
{
  {
    init_simple_test("BFu16s_F_BFu9s");
    static STRUCT_IF_C BFu16s_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu16s_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_BFu9s, BFu16s_F_BFu9s)
//============================================================================


struct  BFu16s_F_C  {
  unsigned short v1:16;
  float v2;
  char v3;
};
//SIG(1 BFu16s_F_C) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_F_C()
{
  {
    init_simple_test("BFu16s_F_C");
    static STRUCT_IF_C BFu16s_F_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_C");
    check_field_offset(lv, v2, 4, "BFu16s_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_C, BFu16s_F_C)
//============================================================================


struct  BFu16s_F_D  {
  unsigned short v1:16;
  float v2;
  double v3;
};
//SIG(1 BFu16s_F_D) C1{ Fs:16 Fi FL}



static void Test_BFu16s_F_D()
{
  {
    init_simple_test("BFu16s_F_D");
    static STRUCT_IF_C BFu16s_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_D");
    check_field_offset(lv, v2, 4, "BFu16s_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_D, BFu16s_F_D)
//============================================================================


struct  BFu16s_F_F  {
  unsigned short v1:16;
  float v2;
  float v3;
};
//SIG(1 BFu16s_F_F) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_F_F()
{
  {
    init_simple_test("BFu16s_F_F");
    static STRUCT_IF_C BFu16s_F_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_F");
    check_field_offset(lv, v2, 4, "BFu16s_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_F, BFu16s_F_F)
//============================================================================


struct  BFu16s_F_I  {
  unsigned short v1:16;
  float v2;
  int v3;
};
//SIG(1 BFu16s_F_I) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_F_I()
{
  {
    init_simple_test("BFu16s_F_I");
    static STRUCT_IF_C BFu16s_F_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_I");
    check_field_offset(lv, v2, 4, "BFu16s_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_I, BFu16s_F_I)
//============================================================================


struct  BFu16s_F_Ip  {
  unsigned short v1:16;
  float v2;
  int *v3;
};
//SIG(1 BFu16s_F_Ip) C1{ Fs:16 Fi Fp}



static void Test_BFu16s_F_Ip()
{
  {
    init_simple_test("BFu16s_F_Ip");
    static STRUCT_IF_C BFu16s_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_Ip");
    check_field_offset(lv, v2, 4, "BFu16s_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_Ip, BFu16s_F_Ip)
//============================================================================


struct  BFu16s_F_L  {
  unsigned short v1:16;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_F_L) C1{ Fs:16 Fi FL}



static void Test_BFu16s_F_L()
{
  {
    init_simple_test("BFu16s_F_L");
    static STRUCT_IF_C BFu16s_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_L");
    check_field_offset(lv, v2, 4, "BFu16s_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_L, BFu16s_F_L)
//============================================================================


struct  BFu16s_F_S  {
  unsigned short v1:16;
  float v2;
  short v3;
};
//SIG(1 BFu16s_F_S) C1{ Fs:16 Fi Fs}



static void Test_BFu16s_F_S()
{
  {
    init_simple_test("BFu16s_F_S");
    static STRUCT_IF_C BFu16s_F_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_S");
    check_field_offset(lv, v2, 4, "BFu16s_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_S, BFu16s_F_S)
//============================================================================


struct  BFu16s_F_Uc  {
  unsigned short v1:16;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu16s_F_Uc) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_F_Uc()
{
  {
    init_simple_test("BFu16s_F_Uc");
    static STRUCT_IF_C BFu16s_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_Uc");
    check_field_offset(lv, v2, 4, "BFu16s_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_Uc, BFu16s_F_Uc)
//============================================================================


struct  BFu16s_F_Ui  {
  unsigned short v1:16;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu16s_F_Ui) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_F_Ui()
{
  {
    init_simple_test("BFu16s_F_Ui");
    static STRUCT_IF_C BFu16s_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_Ui");
    check_field_offset(lv, v2, 4, "BFu16s_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_Ui, BFu16s_F_Ui)
//============================================================================


struct  BFu16s_F_Ul  {
  unsigned short v1:16;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_F_Ul) C1{ Fs:16 Fi FL}



static void Test_BFu16s_F_Ul()
{
  {
    init_simple_test("BFu16s_F_Ul");
    static STRUCT_IF_C BFu16s_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_Ul");
    check_field_offset(lv, v2, 4, "BFu16s_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_Ul, BFu16s_F_Ul)
//============================================================================


struct  BFu16s_F_Us  {
  unsigned short v1:16;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu16s_F_Us) C1{ Fs:16 Fi Fs}



static void Test_BFu16s_F_Us()
{
  {
    init_simple_test("BFu16s_F_Us");
    static STRUCT_IF_C BFu16s_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_Us");
    check_field_offset(lv, v2, 4, "BFu16s_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_Us, BFu16s_F_Us)
//============================================================================


struct  BFu16s_F_Vp  {
  unsigned short v1:16;
  float v2;
  void *v3;
};
//SIG(1 BFu16s_F_Vp) C1{ Fs:16 Fi Fp}



static void Test_BFu16s_F_Vp()
{
  {
    init_simple_test("BFu16s_F_Vp");
    static STRUCT_IF_C BFu16s_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_Vp");
    check_field_offset(lv, v2, 4, "BFu16s_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_F_Vp, BFu16s_F_Vp)
//============================================================================


struct  BFu16s_I  {
  unsigned short v1:16;
  int v2;
};
//SIG(1 BFu16s_I) C1{ Fs:16 Fi}



static void Test_BFu16s_I()
{
  {
    init_simple_test("BFu16s_I");
    static STRUCT_IF_C BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I");
    check_field_offset(lv, v2, 4, "BFu16s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I, BFu16s_I)
//============================================================================


struct  BFu16s_I_BFu15i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_I_BFu15i) C1{ Fs:16 Fi Fi:15}



static void Test_BFu16s_I_BFu15i()
{
  {
    init_simple_test("BFu16s_I_BFu15i");
    static STRUCT_IF_C BFu16s_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu15i, BFu16s_I_BFu15i)
//============================================================================


struct  BFu16s_I_BFu15ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_I_BFu15ll) C1{ Fs:16 Fi FL:15}



static void Test_BFu16s_I_BFu15ll()
{
  {
    init_simple_test("BFu16s_I_BFu15ll");
    static STRUCT_IF_C BFu16s_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu15ll, BFu16s_I_BFu15ll)
//============================================================================


struct  BFu16s_I_BFu15s  {
  unsigned short v1:16;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_I_BFu15s) C1{ Fs:16 Fi Fs:15}



static void Test_BFu16s_I_BFu15s()
{
  {
    init_simple_test("BFu16s_I_BFu15s");
    static STRUCT_IF_C BFu16s_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu16s_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu16s_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu15s, BFu16s_I_BFu15s)
//============================================================================


struct  BFu16s_I_BFu16i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_I_BFu16i) C1{ Fs:16 Fi Fi:16}



static void Test_BFu16s_I_BFu16i()
{
  {
    init_simple_test("BFu16s_I_BFu16i");
    static STRUCT_IF_C BFu16s_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu16i, BFu16s_I_BFu16i)
//============================================================================


struct  BFu16s_I_BFu16ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_I_BFu16ll) C1{ Fs:16 Fi FL:16}



static void Test_BFu16s_I_BFu16ll()
{
  {
    init_simple_test("BFu16s_I_BFu16ll");
    static STRUCT_IF_C BFu16s_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu16ll, BFu16s_I_BFu16ll)
//============================================================================


struct  BFu16s_I_BFu16s  {
  unsigned short v1:16;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_I_BFu16s) C1{ Fs:16 Fi Fs:16}



static void Test_BFu16s_I_BFu16s()
{
  {
    init_simple_test("BFu16s_I_BFu16s");
    static STRUCT_IF_C BFu16s_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu16s_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu16s, BFu16s_I_BFu16s)
//============================================================================


struct  BFu16s_I_BFu17i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_I_BFu17i) C1{ Fs:16 Fi Fi:17}



static void Test_BFu16s_I_BFu17i()
{
  {
    init_simple_test("BFu16s_I_BFu17i");
    static STRUCT_IF_C BFu16s_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu17i, BFu16s_I_BFu17i)
//============================================================================


struct  BFu16s_I_BFu17ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_I_BFu17ll) C1{ Fs:16 Fi FL:17}



static void Test_BFu16s_I_BFu17ll()
{
  {
    init_simple_test("BFu16s_I_BFu17ll");
    static STRUCT_IF_C BFu16s_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu16s_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu16s_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu17ll, BFu16s_I_BFu17ll)
//============================================================================


struct  BFu16s_I_BFu1c  {
  unsigned short v1:16;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_I_BFu1c) C1{ Fs:16 Fi Fc:1}



static void Test_BFu16s_I_BFu1c()
{
  {
    init_simple_test("BFu16s_I_BFu1c");
    static STRUCT_IF_C BFu16s_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu1c, BFu16s_I_BFu1c)
//============================================================================


struct  BFu16s_I_BFu1i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_I_BFu1i) C1{ Fs:16 Fi Fi:1}



static void Test_BFu16s_I_BFu1i()
{
  {
    init_simple_test("BFu16s_I_BFu1i");
    static STRUCT_IF_C BFu16s_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu1i, BFu16s_I_BFu1i)
//============================================================================


struct  BFu16s_I_BFu1ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_I_BFu1ll) C1{ Fs:16 Fi FL:1}



static void Test_BFu16s_I_BFu1ll()
{
  {
    init_simple_test("BFu16s_I_BFu1ll");
    static STRUCT_IF_C BFu16s_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu1ll, BFu16s_I_BFu1ll)
//============================================================================


struct  BFu16s_I_BFu1s  {
  unsigned short v1:16;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_I_BFu1s) C1{ Fs:16 Fi Fs:1}



static void Test_BFu16s_I_BFu1s()
{
  {
    init_simple_test("BFu16s_I_BFu1s");
    static STRUCT_IF_C BFu16s_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu16s_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu1s, BFu16s_I_BFu1s)
//============================================================================


struct  BFu16s_I_BFu31i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_I_BFu31i) C1{ Fs:16 Fi Fi:31}



static void Test_BFu16s_I_BFu31i()
{
  {
    init_simple_test("BFu16s_I_BFu31i");
    static STRUCT_IF_C BFu16s_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu31i, BFu16s_I_BFu31i)
//============================================================================


struct  BFu16s_I_BFu31ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_I_BFu31ll) C1{ Fs:16 Fi FL:31}



static void Test_BFu16s_I_BFu31ll()
{
  {
    init_simple_test("BFu16s_I_BFu31ll");
    static STRUCT_IF_C BFu16s_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu16s_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu16s_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu31ll, BFu16s_I_BFu31ll)
//============================================================================


struct  BFu16s_I_BFu32i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_I_BFu32i) C1{ Fs:16 Fi Fi:32}



static void Test_BFu16s_I_BFu32i()
{
  {
    init_simple_test("BFu16s_I_BFu32i");
    static STRUCT_IF_C BFu16s_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu32i, BFu16s_I_BFu32i)
//============================================================================


struct  BFu16s_I_BFu32ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_I_BFu32ll) C1{ Fs:16 Fi FL:32}



static void Test_BFu16s_I_BFu32ll()
{
  {
    init_simple_test("BFu16s_I_BFu32ll");
    static STRUCT_IF_C BFu16s_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu16s_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu16s_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu32ll, BFu16s_I_BFu32ll)
//============================================================================


struct  BFu16s_I_BFu33  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_I_BFu33) C1{ Fs:16 Fi FL:33}



static void Test_BFu16s_I_BFu33()
{
  {
    init_simple_test("BFu16s_I_BFu33");
    static STRUCT_IF_C BFu16s_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu16s_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu16s_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu33, BFu16s_I_BFu33)
//============================================================================


struct  BFu16s_I_BFu7c  {
  unsigned short v1:16;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_I_BFu7c) C1{ Fs:16 Fi Fc:7}



static void Test_BFu16s_I_BFu7c()
{
  {
    init_simple_test("BFu16s_I_BFu7c");
    static STRUCT_IF_C BFu16s_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu7c, BFu16s_I_BFu7c)
//============================================================================


struct  BFu16s_I_BFu7i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_I_BFu7i) C1{ Fs:16 Fi Fi:7}



static void Test_BFu16s_I_BFu7i()
{
  {
    init_simple_test("BFu16s_I_BFu7i");
    static STRUCT_IF_C BFu16s_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu7i, BFu16s_I_BFu7i)
//============================================================================


struct  BFu16s_I_BFu7ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_I_BFu7ll) C1{ Fs:16 Fi FL:7}



static void Test_BFu16s_I_BFu7ll()
{
  {
    init_simple_test("BFu16s_I_BFu7ll");
    static STRUCT_IF_C BFu16s_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu7ll, BFu16s_I_BFu7ll)
//============================================================================


struct  BFu16s_I_BFu7s  {
  unsigned short v1:16;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_I_BFu7s) C1{ Fs:16 Fi Fs:7}



static void Test_BFu16s_I_BFu7s()
{
  {
    init_simple_test("BFu16s_I_BFu7s");
    static STRUCT_IF_C BFu16s_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu16s_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu16s_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu7s, BFu16s_I_BFu7s)
//============================================================================


struct  BFu16s_I_BFu8c  {
  unsigned short v1:16;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_I_BFu8c) C1{ Fs:16 Fi Fc:8}



static void Test_BFu16s_I_BFu8c()
{
  {
    init_simple_test("BFu16s_I_BFu8c");
    static STRUCT_IF_C BFu16s_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu8c, BFu16s_I_BFu8c)
//============================================================================


struct  BFu16s_I_BFu8i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_I_BFu8i) C1{ Fs:16 Fi Fi:8}



static void Test_BFu16s_I_BFu8i()
{
  {
    init_simple_test("BFu16s_I_BFu8i");
    static STRUCT_IF_C BFu16s_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu8i, BFu16s_I_BFu8i)
//============================================================================


struct  BFu16s_I_BFu8ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_I_BFu8ll) C1{ Fs:16 Fi FL:8}



static void Test_BFu16s_I_BFu8ll()
{
  {
    init_simple_test("BFu16s_I_BFu8ll");
    static STRUCT_IF_C BFu16s_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu8ll, BFu16s_I_BFu8ll)
//============================================================================


struct  BFu16s_I_BFu8s  {
  unsigned short v1:16;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_I_BFu8s) C1{ Fs:16 Fi Fs:8}



static void Test_BFu16s_I_BFu8s()
{
  {
    init_simple_test("BFu16s_I_BFu8s");
    static STRUCT_IF_C BFu16s_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu16s_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu16s_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu8s, BFu16s_I_BFu8s)
//============================================================================


struct  BFu16s_I_BFu9i  {
  unsigned short v1:16;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_I_BFu9i) C1{ Fs:16 Fi Fi:9}



static void Test_BFu16s_I_BFu9i()
{
  {
    init_simple_test("BFu16s_I_BFu9i");
    static STRUCT_IF_C BFu16s_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu9i, BFu16s_I_BFu9i)
//============================================================================


struct  BFu16s_I_BFu9ll  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_I_BFu9ll) C1{ Fs:16 Fi FL:9}



static void Test_BFu16s_I_BFu9ll()
{
  {
    init_simple_test("BFu16s_I_BFu9ll");
    static STRUCT_IF_C BFu16s_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu9ll, BFu16s_I_BFu9ll)
//============================================================================


struct  BFu16s_I_BFu9s  {
  unsigned short v1:16;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_I_BFu9s) C1{ Fs:16 Fi Fs:9}



static void Test_BFu16s_I_BFu9s()
{
  {
    init_simple_test("BFu16s_I_BFu9s");
    static STRUCT_IF_C BFu16s_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu16s_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu16s_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu16s_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_BFu9s, BFu16s_I_BFu9s)
//============================================================================


struct  BFu16s_I_C  {
  unsigned short v1:16;
  int v2;
  char v3;
};
//SIG(1 BFu16s_I_C) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_I_C()
{
  {
    init_simple_test("BFu16s_I_C");
    static STRUCT_IF_C BFu16s_I_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_C");
    check_field_offset(lv, v2, 4, "BFu16s_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_C, BFu16s_I_C)
//============================================================================


struct  BFu16s_I_D  {
  unsigned short v1:16;
  int v2;
  double v3;
};
//SIG(1 BFu16s_I_D) C1{ Fs:16 Fi FL}



static void Test_BFu16s_I_D()
{
  {
    init_simple_test("BFu16s_I_D");
    static STRUCT_IF_C BFu16s_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_D");
    check_field_offset(lv, v2, 4, "BFu16s_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_D, BFu16s_I_D)
//============================================================================


struct  BFu16s_I_F  {
  unsigned short v1:16;
  int v2;
  float v3;
};
//SIG(1 BFu16s_I_F) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_I_F()
{
  {
    init_simple_test("BFu16s_I_F");
    static STRUCT_IF_C BFu16s_I_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_F");
    check_field_offset(lv, v2, 4, "BFu16s_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_F, BFu16s_I_F)
//============================================================================


struct  BFu16s_I_I  {
  unsigned short v1:16;
  int v2;
  int v3;
};
//SIG(1 BFu16s_I_I) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_I_I()
{
  {
    init_simple_test("BFu16s_I_I");
    static STRUCT_IF_C BFu16s_I_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_I");
    check_field_offset(lv, v2, 4, "BFu16s_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_I, BFu16s_I_I)
//============================================================================


struct  BFu16s_I_Ip  {
  unsigned short v1:16;
  int v2;
  int *v3;
};
//SIG(1 BFu16s_I_Ip) C1{ Fs:16 Fi Fp}



static void Test_BFu16s_I_Ip()
{
  {
    init_simple_test("BFu16s_I_Ip");
    static STRUCT_IF_C BFu16s_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_Ip");
    check_field_offset(lv, v2, 4, "BFu16s_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_Ip, BFu16s_I_Ip)
//============================================================================


struct  BFu16s_I_L  {
  unsigned short v1:16;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_I_L) C1{ Fs:16 Fi FL}



static void Test_BFu16s_I_L()
{
  {
    init_simple_test("BFu16s_I_L");
    static STRUCT_IF_C BFu16s_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_L");
    check_field_offset(lv, v2, 4, "BFu16s_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_L, BFu16s_I_L)
//============================================================================


struct  BFu16s_I_S  {
  unsigned short v1:16;
  int v2;
  short v3;
};
//SIG(1 BFu16s_I_S) C1{ Fs:16 Fi Fs}



static void Test_BFu16s_I_S()
{
  {
    init_simple_test("BFu16s_I_S");
    static STRUCT_IF_C BFu16s_I_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_S");
    check_field_offset(lv, v2, 4, "BFu16s_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_S, BFu16s_I_S)
//============================================================================


struct  BFu16s_I_Uc  {
  unsigned short v1:16;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu16s_I_Uc) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_I_Uc()
{
  {
    init_simple_test("BFu16s_I_Uc");
    static STRUCT_IF_C BFu16s_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_Uc");
    check_field_offset(lv, v2, 4, "BFu16s_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_Uc, BFu16s_I_Uc)
//============================================================================


struct  BFu16s_I_Ui  {
  unsigned short v1:16;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu16s_I_Ui) C1{ Fs:16 Fi[2]}



static void Test_BFu16s_I_Ui()
{
  {
    init_simple_test("BFu16s_I_Ui");
    static STRUCT_IF_C BFu16s_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_Ui");
    check_field_offset(lv, v2, 4, "BFu16s_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_Ui, BFu16s_I_Ui)
//============================================================================


struct  BFu16s_I_Ul  {
  unsigned short v1:16;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_I_Ul) C1{ Fs:16 Fi FL}



static void Test_BFu16s_I_Ul()
{
  {
    init_simple_test("BFu16s_I_Ul");
    static STRUCT_IF_C BFu16s_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu16s_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_Ul");
    check_field_offset(lv, v2, 4, "BFu16s_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_Ul, BFu16s_I_Ul)
//============================================================================


struct  BFu16s_I_Us  {
  unsigned short v1:16;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu16s_I_Us) C1{ Fs:16 Fi Fs}



static void Test_BFu16s_I_Us()
{
  {
    init_simple_test("BFu16s_I_Us");
    static STRUCT_IF_C BFu16s_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_Us");
    check_field_offset(lv, v2, 4, "BFu16s_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_Us, BFu16s_I_Us)
//============================================================================


struct  BFu16s_I_Vp  {
  unsigned short v1:16;
  int v2;
  void *v3;
};
//SIG(1 BFu16s_I_Vp) C1{ Fs:16 Fi Fp}



static void Test_BFu16s_I_Vp()
{
  {
    init_simple_test("BFu16s_I_Vp");
    static STRUCT_IF_C BFu16s_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_Vp");
    check_field_offset(lv, v2, 4, "BFu16s_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_I_Vp, BFu16s_I_Vp)
//============================================================================


struct  BFu16s_Ip  {
  unsigned short v1:16;
  int *v2;
};
//SIG(1 BFu16s_Ip) C1{ Fs:16 Fp}



static void Test_BFu16s_Ip()
{
  {
    init_simple_test("BFu16s_Ip");
    static STRUCT_IF_C BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip, BFu16s_Ip)
//============================================================================


struct  BFu16s_Ip_BFu15i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_Ip_BFu15i) C1{ Fs:16 Fp Fi:15}



static void Test_BFu16s_Ip_BFu15i()
{
  {
    init_simple_test("BFu16s_Ip_BFu15i");
    static STRUCT_IF_C BFu16s_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16s_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16s_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu15i, BFu16s_Ip_BFu15i)
//============================================================================


struct  BFu16s_Ip_BFu15ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_Ip_BFu15ll) C1{ Fs:16 Fp FL:15}



static void Test_BFu16s_Ip_BFu15ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu15ll");
    static STRUCT_IF_C BFu16s_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16s_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16s_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu15ll, BFu16s_Ip_BFu15ll)
//============================================================================


struct  BFu16s_Ip_BFu15s  {
  unsigned short v1:16;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_Ip_BFu15s) C1{ Fs:16 Fp Fs:15}



static void Test_BFu16s_Ip_BFu15s()
{
  {
    init_simple_test("BFu16s_Ip_BFu15s");
    static STRUCT_IF_C BFu16s_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu16s_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu16s_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu15s, BFu16s_Ip_BFu15s)
//============================================================================


struct  BFu16s_Ip_BFu16i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_Ip_BFu16i) C1{ Fs:16 Fp Fi:16}



static void Test_BFu16s_Ip_BFu16i()
{
  {
    init_simple_test("BFu16s_Ip_BFu16i");
    static STRUCT_IF_C BFu16s_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16s_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu16i, BFu16s_Ip_BFu16i)
//============================================================================


struct  BFu16s_Ip_BFu16ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_Ip_BFu16ll) C1{ Fs:16 Fp FL:16}



static void Test_BFu16s_Ip_BFu16ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu16ll");
    static STRUCT_IF_C BFu16s_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16s_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu16ll, BFu16s_Ip_BFu16ll)
//============================================================================


struct  BFu16s_Ip_BFu16s  {
  unsigned short v1:16;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_Ip_BFu16s) C1{ Fs:16 Fp Fs:16}



static void Test_BFu16s_Ip_BFu16s()
{
  {
    init_simple_test("BFu16s_Ip_BFu16s");
    static STRUCT_IF_C BFu16s_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu16s_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu16s, BFu16s_Ip_BFu16s)
//============================================================================


struct  BFu16s_Ip_BFu17i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_Ip_BFu17i) C1{ Fs:16 Fp Fi:17}



static void Test_BFu16s_Ip_BFu17i()
{
  {
    init_simple_test("BFu16s_Ip_BFu17i");
    static STRUCT_IF_C BFu16s_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu16s_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu16s_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu17i, BFu16s_Ip_BFu17i)
//============================================================================


struct  BFu16s_Ip_BFu17ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_Ip_BFu17ll) C1{ Fs:16 Fp FL:17}



static void Test_BFu16s_Ip_BFu17ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu17ll");
    static STRUCT_IF_C BFu16s_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu16s_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu16s_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu17ll, BFu16s_Ip_BFu17ll)
//============================================================================


struct  BFu16s_Ip_BFu1c  {
  unsigned short v1:16;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_Ip_BFu1c) C1{ Fs:16 Fp Fc:1}



static void Test_BFu16s_Ip_BFu1c()
{
  {
    init_simple_test("BFu16s_Ip_BFu1c");
    static STRUCT_IF_C BFu16s_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16s_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu1c, BFu16s_Ip_BFu1c)
//============================================================================


struct  BFu16s_Ip_BFu1i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_Ip_BFu1i) C1{ Fs:16 Fp Fi:1}



static void Test_BFu16s_Ip_BFu1i()
{
  {
    init_simple_test("BFu16s_Ip_BFu1i");
    static STRUCT_IF_C BFu16s_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16s_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu1i, BFu16s_Ip_BFu1i)
//============================================================================


struct  BFu16s_Ip_BFu1ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_Ip_BFu1ll) C1{ Fs:16 Fp FL:1}



static void Test_BFu16s_Ip_BFu1ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu1ll");
    static STRUCT_IF_C BFu16s_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16s_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu1ll, BFu16s_Ip_BFu1ll)
//============================================================================


struct  BFu16s_Ip_BFu1s  {
  unsigned short v1:16;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_Ip_BFu1s) C1{ Fs:16 Fp Fs:1}



static void Test_BFu16s_Ip_BFu1s()
{
  {
    init_simple_test("BFu16s_Ip_BFu1s");
    static STRUCT_IF_C BFu16s_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu16s_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu1s, BFu16s_Ip_BFu1s)
//============================================================================


struct  BFu16s_Ip_BFu31i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_Ip_BFu31i) C1{ Fs:16 Fp Fi:31}



static void Test_BFu16s_Ip_BFu31i()
{
  {
    init_simple_test("BFu16s_Ip_BFu31i");
    static STRUCT_IF_C BFu16s_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu16s_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu16s_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu31i, BFu16s_Ip_BFu31i)
//============================================================================


struct  BFu16s_Ip_BFu31ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_Ip_BFu31ll) C1{ Fs:16 Fp FL:31}



static void Test_BFu16s_Ip_BFu31ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu31ll");
    static STRUCT_IF_C BFu16s_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu16s_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu16s_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu31ll, BFu16s_Ip_BFu31ll)
//============================================================================


struct  BFu16s_Ip_BFu32i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_Ip_BFu32i) C1{ Fs:16 Fp Fi:32}



static void Test_BFu16s_Ip_BFu32i()
{
  {
    init_simple_test("BFu16s_Ip_BFu32i");
    static STRUCT_IF_C BFu16s_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu16s_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu16s_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu32i, BFu16s_Ip_BFu32i)
//============================================================================


struct  BFu16s_Ip_BFu32ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_Ip_BFu32ll) C1{ Fs:16 Fp FL:32}



static void Test_BFu16s_Ip_BFu32ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu32ll");
    static STRUCT_IF_C BFu16s_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu16s_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu16s_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu32ll, BFu16s_Ip_BFu32ll)
//============================================================================


struct  BFu16s_Ip_BFu33  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_Ip_BFu33) C1{ Fs:16 Fp FL:33}



static void Test_BFu16s_Ip_BFu33()
{
  {
    init_simple_test("BFu16s_Ip_BFu33");
    static STRUCT_IF_C BFu16s_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu16s_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu16s_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu33, BFu16s_Ip_BFu33)
//============================================================================


struct  BFu16s_Ip_BFu7c  {
  unsigned short v1:16;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_Ip_BFu7c) C1{ Fs:16 Fp Fc:7}



static void Test_BFu16s_Ip_BFu7c()
{
  {
    init_simple_test("BFu16s_Ip_BFu7c");
    static STRUCT_IF_C BFu16s_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16s_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16s_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu7c, BFu16s_Ip_BFu7c)
//============================================================================


struct  BFu16s_Ip_BFu7i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_Ip_BFu7i) C1{ Fs:16 Fp Fi:7}



static void Test_BFu16s_Ip_BFu7i()
{
  {
    init_simple_test("BFu16s_Ip_BFu7i");
    static STRUCT_IF_C BFu16s_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16s_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16s_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu7i, BFu16s_Ip_BFu7i)
//============================================================================


struct  BFu16s_Ip_BFu7ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_Ip_BFu7ll) C1{ Fs:16 Fp FL:7}



static void Test_BFu16s_Ip_BFu7ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu7ll");
    static STRUCT_IF_C BFu16s_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16s_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16s_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu7ll, BFu16s_Ip_BFu7ll)
//============================================================================


struct  BFu16s_Ip_BFu7s  {
  unsigned short v1:16;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_Ip_BFu7s) C1{ Fs:16 Fp Fs:7}



static void Test_BFu16s_Ip_BFu7s()
{
  {
    init_simple_test("BFu16s_Ip_BFu7s");
    static STRUCT_IF_C BFu16s_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu16s_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu16s_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu7s, BFu16s_Ip_BFu7s)
//============================================================================


struct  BFu16s_Ip_BFu8c  {
  unsigned short v1:16;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_Ip_BFu8c) C1{ Fs:16 Fp Fc:8}



static void Test_BFu16s_Ip_BFu8c()
{
  {
    init_simple_test("BFu16s_Ip_BFu8c");
    static STRUCT_IF_C BFu16s_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16s_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16s_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu8c, BFu16s_Ip_BFu8c)
//============================================================================


struct  BFu16s_Ip_BFu8i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_Ip_BFu8i) C1{ Fs:16 Fp Fi:8}



static void Test_BFu16s_Ip_BFu8i()
{
  {
    init_simple_test("BFu16s_Ip_BFu8i");
    static STRUCT_IF_C BFu16s_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16s_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16s_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu8i, BFu16s_Ip_BFu8i)
//============================================================================


struct  BFu16s_Ip_BFu8ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_Ip_BFu8ll) C1{ Fs:16 Fp FL:8}



static void Test_BFu16s_Ip_BFu8ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu8ll");
    static STRUCT_IF_C BFu16s_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16s_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16s_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu8ll, BFu16s_Ip_BFu8ll)
//============================================================================


struct  BFu16s_Ip_BFu8s  {
  unsigned short v1:16;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_Ip_BFu8s) C1{ Fs:16 Fp Fs:8}



static void Test_BFu16s_Ip_BFu8s()
{
  {
    init_simple_test("BFu16s_Ip_BFu8s");
    static STRUCT_IF_C BFu16s_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu16s_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu16s_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu8s, BFu16s_Ip_BFu8s)
//============================================================================


struct  BFu16s_Ip_BFu9i  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_Ip_BFu9i) C1{ Fs:16 Fp Fi:9}



static void Test_BFu16s_Ip_BFu9i()
{
  {
    init_simple_test("BFu16s_Ip_BFu9i");
    static STRUCT_IF_C BFu16s_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16s_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16s_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu9i, BFu16s_Ip_BFu9i)
//============================================================================


struct  BFu16s_Ip_BFu9ll  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_Ip_BFu9ll) C1{ Fs:16 Fp FL:9}



static void Test_BFu16s_Ip_BFu9ll()
{
  {
    init_simple_test("BFu16s_Ip_BFu9ll");
    static STRUCT_IF_C BFu16s_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16s_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16s_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu9ll, BFu16s_Ip_BFu9ll)
//============================================================================


struct  BFu16s_Ip_BFu9s  {
  unsigned short v1:16;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_Ip_BFu9s) C1{ Fs:16 Fp Fs:9}



static void Test_BFu16s_Ip_BFu9s()
{
  {
    init_simple_test("BFu16s_Ip_BFu9s");
    static STRUCT_IF_C BFu16s_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu16s_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu16s_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_BFu9s, BFu16s_Ip_BFu9s)
//============================================================================


struct  BFu16s_Ip_C  {
  unsigned short v1:16;
  int *v2;
  char v3;
};
//SIG(1 BFu16s_Ip_C) C1{ Fs:16 Fp Fc}



static void Test_BFu16s_Ip_C()
{
  {
    init_simple_test("BFu16s_Ip_C");
    static STRUCT_IF_C BFu16s_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_C, BFu16s_Ip_C)
//============================================================================


struct  BFu16s_Ip_D  {
  unsigned short v1:16;
  int *v2;
  double v3;
};
//SIG(1 BFu16s_Ip_D) C1{ Fs:16 Fp FL}



static void Test_BFu16s_Ip_D()
{
  {
    init_simple_test("BFu16s_Ip_D");
    static STRUCT_IF_C BFu16s_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_D, BFu16s_Ip_D)
//============================================================================


struct  BFu16s_Ip_F  {
  unsigned short v1:16;
  int *v2;
  float v3;
};
//SIG(1 BFu16s_Ip_F) C1{ Fs:16 Fp Fi}



static void Test_BFu16s_Ip_F()
{
  {
    init_simple_test("BFu16s_Ip_F");
    static STRUCT_IF_C BFu16s_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_F, BFu16s_Ip_F)
//============================================================================


struct  BFu16s_Ip_I  {
  unsigned short v1:16;
  int *v2;
  int v3;
};
//SIG(1 BFu16s_Ip_I) C1{ Fs:16 Fp Fi}



static void Test_BFu16s_Ip_I()
{
  {
    init_simple_test("BFu16s_Ip_I");
    static STRUCT_IF_C BFu16s_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_I, BFu16s_Ip_I)
//============================================================================


struct  BFu16s_Ip_Ip  {
  unsigned short v1:16;
  int *v2;
  int *v3;
};
//SIG(1 BFu16s_Ip_Ip) C1{ Fs:16 Fp[2]}



static void Test_BFu16s_Ip_Ip()
{
  {
    init_simple_test("BFu16s_Ip_Ip");
    static STRUCT_IF_C BFu16s_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_Ip, BFu16s_Ip_Ip)
//============================================================================


struct  BFu16s_Ip_L  {
  unsigned short v1:16;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_Ip_L) C1{ Fs:16 Fp FL}



static void Test_BFu16s_Ip_L()
{
  {
    init_simple_test("BFu16s_Ip_L");
    static STRUCT_IF_C BFu16s_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_L, BFu16s_Ip_L)
//============================================================================


struct  BFu16s_Ip_S  {
  unsigned short v1:16;
  int *v2;
  short v3;
};
//SIG(1 BFu16s_Ip_S) C1{ Fs:16 Fp Fs}



static void Test_BFu16s_Ip_S()
{
  {
    init_simple_test("BFu16s_Ip_S");
    static STRUCT_IF_C BFu16s_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_S, BFu16s_Ip_S)
//============================================================================


struct  BFu16s_Ip_Uc  {
  unsigned short v1:16;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu16s_Ip_Uc) C1{ Fs:16 Fp Fc}



static void Test_BFu16s_Ip_Uc()
{
  {
    init_simple_test("BFu16s_Ip_Uc");
    static STRUCT_IF_C BFu16s_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_Uc, BFu16s_Ip_Uc)
//============================================================================


struct  BFu16s_Ip_Ui  {
  unsigned short v1:16;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu16s_Ip_Ui) C1{ Fs:16 Fp Fi}



static void Test_BFu16s_Ip_Ui()
{
  {
    init_simple_test("BFu16s_Ip_Ui");
    static STRUCT_IF_C BFu16s_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_Ui, BFu16s_Ip_Ui)
//============================================================================


struct  BFu16s_Ip_Ul  {
  unsigned short v1:16;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_Ip_Ul) C1{ Fs:16 Fp FL}



static void Test_BFu16s_Ip_Ul()
{
  {
    init_simple_test("BFu16s_Ip_Ul");
    static STRUCT_IF_C BFu16s_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_Ul, BFu16s_Ip_Ul)
//============================================================================


struct  BFu16s_Ip_Us  {
  unsigned short v1:16;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu16s_Ip_Us) C1{ Fs:16 Fp Fs}



static void Test_BFu16s_Ip_Us()
{
  {
    init_simple_test("BFu16s_Ip_Us");
    static STRUCT_IF_C BFu16s_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_Us, BFu16s_Ip_Us)
//============================================================================


struct  BFu16s_Ip_Vp  {
  unsigned short v1:16;
  int *v2;
  void *v3;
};
//SIG(1 BFu16s_Ip_Vp) C1{ Fs:16 Fp[2]}



static void Test_BFu16s_Ip_Vp()
{
  {
    init_simple_test("BFu16s_Ip_Vp");
    static STRUCT_IF_C BFu16s_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Ip_Vp, BFu16s_Ip_Vp)
//============================================================================


struct  BFu16s_L  {
  unsigned short v1:16;
  __tsi64 v2;
};
//SIG(1 BFu16s_L) C1{ Fs:16 FL}



static void Test_BFu16s_L()
{
  {
    init_simple_test("BFu16s_L");
    static STRUCT_IF_C BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L, BFu16s_L)
//============================================================================


struct  BFu16s_L_BFu15i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_L_BFu15i) C1{ Fs:16 FL Fi:15}



static void Test_BFu16s_L_BFu15i()
{
  {
    init_simple_test("BFu16s_L_BFu15i");
    static STRUCT_IF_C BFu16s_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu15i, BFu16s_L_BFu15i)
//============================================================================


struct  BFu16s_L_BFu15ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_L_BFu15ll) C1{ Fs:16 FL FL:15}



static void Test_BFu16s_L_BFu15ll()
{
  {
    init_simple_test("BFu16s_L_BFu15ll");
    static STRUCT_IF_C BFu16s_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu15ll, BFu16s_L_BFu15ll)
//============================================================================


struct  BFu16s_L_BFu15s  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_L_BFu15s) C1{ Fs:16 FL Fs:15}



static void Test_BFu16s_L_BFu15s()
{
  {
    init_simple_test("BFu16s_L_BFu15s");
    static STRUCT_IF_C BFu16s_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu16s_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu16s_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu15s, BFu16s_L_BFu15s)
//============================================================================


struct  BFu16s_L_BFu16i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_L_BFu16i) C1{ Fs:16 FL Fi:16}



static void Test_BFu16s_L_BFu16i()
{
  {
    init_simple_test("BFu16s_L_BFu16i");
    static STRUCT_IF_C BFu16s_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu16i, BFu16s_L_BFu16i)
//============================================================================


struct  BFu16s_L_BFu16ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_L_BFu16ll) C1{ Fs:16 FL FL:16}



static void Test_BFu16s_L_BFu16ll()
{
  {
    init_simple_test("BFu16s_L_BFu16ll");
    static STRUCT_IF_C BFu16s_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu16ll, BFu16s_L_BFu16ll)
//============================================================================


struct  BFu16s_L_BFu16s  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_L_BFu16s) C1{ Fs:16 FL Fs:16}



static void Test_BFu16s_L_BFu16s()
{
  {
    init_simple_test("BFu16s_L_BFu16s");
    static STRUCT_IF_C BFu16s_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu16s_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu16s, BFu16s_L_BFu16s)
//============================================================================


struct  BFu16s_L_BFu17i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_L_BFu17i) C1{ Fs:16 FL Fi:17}



static void Test_BFu16s_L_BFu17i()
{
  {
    init_simple_test("BFu16s_L_BFu17i");
    static STRUCT_IF_C BFu16s_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16s_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16s_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu17i, BFu16s_L_BFu17i)
//============================================================================


struct  BFu16s_L_BFu17ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_L_BFu17ll) C1{ Fs:16 FL FL:17}



static void Test_BFu16s_L_BFu17ll()
{
  {
    init_simple_test("BFu16s_L_BFu17ll");
    static STRUCT_IF_C BFu16s_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu16s_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu16s_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu17ll, BFu16s_L_BFu17ll)
//============================================================================


struct  BFu16s_L_BFu1c  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_L_BFu1c) C1{ Fs:16 FL Fc:1}



static void Test_BFu16s_L_BFu1c()
{
  {
    init_simple_test("BFu16s_L_BFu1c");
    static STRUCT_IF_C BFu16s_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu1c, BFu16s_L_BFu1c)
//============================================================================


struct  BFu16s_L_BFu1i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_L_BFu1i) C1{ Fs:16 FL Fi:1}



static void Test_BFu16s_L_BFu1i()
{
  {
    init_simple_test("BFu16s_L_BFu1i");
    static STRUCT_IF_C BFu16s_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu1i, BFu16s_L_BFu1i)
//============================================================================


struct  BFu16s_L_BFu1ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_L_BFu1ll) C1{ Fs:16 FL FL:1}



static void Test_BFu16s_L_BFu1ll()
{
  {
    init_simple_test("BFu16s_L_BFu1ll");
    static STRUCT_IF_C BFu16s_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu1ll, BFu16s_L_BFu1ll)
//============================================================================


struct  BFu16s_L_BFu1s  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_L_BFu1s) C1{ Fs:16 FL Fs:1}



static void Test_BFu16s_L_BFu1s()
{
  {
    init_simple_test("BFu16s_L_BFu1s");
    static STRUCT_IF_C BFu16s_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu16s_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu1s, BFu16s_L_BFu1s)
//============================================================================


struct  BFu16s_L_BFu31i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_L_BFu31i) C1{ Fs:16 FL Fi:31}



static void Test_BFu16s_L_BFu31i()
{
  {
    init_simple_test("BFu16s_L_BFu31i");
    static STRUCT_IF_C BFu16s_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16s_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16s_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu31i, BFu16s_L_BFu31i)
//============================================================================


struct  BFu16s_L_BFu31ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_L_BFu31ll) C1{ Fs:16 FL FL:31}



static void Test_BFu16s_L_BFu31ll()
{
  {
    init_simple_test("BFu16s_L_BFu31ll");
    static STRUCT_IF_C BFu16s_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu16s_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu16s_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu31ll, BFu16s_L_BFu31ll)
//============================================================================


struct  BFu16s_L_BFu32i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_L_BFu32i) C1{ Fs:16 FL Fi:32}



static void Test_BFu16s_L_BFu32i()
{
  {
    init_simple_test("BFu16s_L_BFu32i");
    static STRUCT_IF_C BFu16s_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16s_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16s_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu32i, BFu16s_L_BFu32i)
//============================================================================


struct  BFu16s_L_BFu32ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_L_BFu32ll) C1{ Fs:16 FL FL:32}



static void Test_BFu16s_L_BFu32ll()
{
  {
    init_simple_test("BFu16s_L_BFu32ll");
    static STRUCT_IF_C BFu16s_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu16s_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu16s_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu32ll, BFu16s_L_BFu32ll)
//============================================================================


struct  BFu16s_L_BFu33  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_L_BFu33) C1{ Fs:16 FL FL:33}



static void Test_BFu16s_L_BFu33()
{
  {
    init_simple_test("BFu16s_L_BFu33");
    static STRUCT_IF_C BFu16s_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu16s_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu16s_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu33, BFu16s_L_BFu33)
//============================================================================


struct  BFu16s_L_BFu7c  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_L_BFu7c) C1{ Fs:16 FL Fc:7}



static void Test_BFu16s_L_BFu7c()
{
  {
    init_simple_test("BFu16s_L_BFu7c");
    static STRUCT_IF_C BFu16s_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu7c, BFu16s_L_BFu7c)
//============================================================================


struct  BFu16s_L_BFu7i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_L_BFu7i) C1{ Fs:16 FL Fi:7}



static void Test_BFu16s_L_BFu7i()
{
  {
    init_simple_test("BFu16s_L_BFu7i");
    static STRUCT_IF_C BFu16s_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu7i, BFu16s_L_BFu7i)
//============================================================================


struct  BFu16s_L_BFu7ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_L_BFu7ll) C1{ Fs:16 FL FL:7}



static void Test_BFu16s_L_BFu7ll()
{
  {
    init_simple_test("BFu16s_L_BFu7ll");
    static STRUCT_IF_C BFu16s_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu7ll, BFu16s_L_BFu7ll)
//============================================================================


struct  BFu16s_L_BFu7s  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_L_BFu7s) C1{ Fs:16 FL Fs:7}



static void Test_BFu16s_L_BFu7s()
{
  {
    init_simple_test("BFu16s_L_BFu7s");
    static STRUCT_IF_C BFu16s_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu16s_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu16s_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu7s, BFu16s_L_BFu7s)
//============================================================================


struct  BFu16s_L_BFu8c  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_L_BFu8c) C1{ Fs:16 FL Fc:8}



static void Test_BFu16s_L_BFu8c()
{
  {
    init_simple_test("BFu16s_L_BFu8c");
    static STRUCT_IF_C BFu16s_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu8c, BFu16s_L_BFu8c)
//============================================================================


struct  BFu16s_L_BFu8i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_L_BFu8i) C1{ Fs:16 FL Fi:8}



static void Test_BFu16s_L_BFu8i()
{
  {
    init_simple_test("BFu16s_L_BFu8i");
    static STRUCT_IF_C BFu16s_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu8i, BFu16s_L_BFu8i)
//============================================================================


struct  BFu16s_L_BFu8ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_L_BFu8ll) C1{ Fs:16 FL FL:8}



static void Test_BFu16s_L_BFu8ll()
{
  {
    init_simple_test("BFu16s_L_BFu8ll");
    static STRUCT_IF_C BFu16s_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu8ll, BFu16s_L_BFu8ll)
//============================================================================


struct  BFu16s_L_BFu8s  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_L_BFu8s) C1{ Fs:16 FL Fs:8}



static void Test_BFu16s_L_BFu8s()
{
  {
    init_simple_test("BFu16s_L_BFu8s");
    static STRUCT_IF_C BFu16s_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu16s_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu16s_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu8s, BFu16s_L_BFu8s)
//============================================================================


struct  BFu16s_L_BFu9i  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_L_BFu9i) C1{ Fs:16 FL Fi:9}



static void Test_BFu16s_L_BFu9i()
{
  {
    init_simple_test("BFu16s_L_BFu9i");
    static STRUCT_IF_C BFu16s_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu9i, BFu16s_L_BFu9i)
//============================================================================


struct  BFu16s_L_BFu9ll  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_L_BFu9ll) C1{ Fs:16 FL FL:9}



static void Test_BFu16s_L_BFu9ll()
{
  {
    init_simple_test("BFu16s_L_BFu9ll");
    static STRUCT_IF_C BFu16s_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu9ll, BFu16s_L_BFu9ll)
//============================================================================


struct  BFu16s_L_BFu9s  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_L_BFu9s) C1{ Fs:16 FL Fs:9}



static void Test_BFu16s_L_BFu9s()
{
  {
    init_simple_test("BFu16s_L_BFu9s");
    static STRUCT_IF_C BFu16s_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu16s_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu16s_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_BFu9s, BFu16s_L_BFu9s)
//============================================================================


struct  BFu16s_L_C  {
  unsigned short v1:16;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu16s_L_C) C1{ Fs:16 FL Fc}



static void Test_BFu16s_L_C()
{
  {
    init_simple_test("BFu16s_L_C");
    static STRUCT_IF_C BFu16s_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_C, BFu16s_L_C)
//============================================================================


struct  BFu16s_L_D  {
  unsigned short v1:16;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu16s_L_D) C1{ Fs:16 FL[2]}



static void Test_BFu16s_L_D()
{
  {
    init_simple_test("BFu16s_L_D");
    static STRUCT_IF_C BFu16s_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_D, BFu16s_L_D)
//============================================================================


struct  BFu16s_L_F  {
  unsigned short v1:16;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu16s_L_F) C1{ Fs:16 FL Fi}



static void Test_BFu16s_L_F()
{
  {
    init_simple_test("BFu16s_L_F");
    static STRUCT_IF_C BFu16s_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_F, BFu16s_L_F)
//============================================================================


struct  BFu16s_L_I  {
  unsigned short v1:16;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu16s_L_I) C1{ Fs:16 FL Fi}



static void Test_BFu16s_L_I()
{
  {
    init_simple_test("BFu16s_L_I");
    static STRUCT_IF_C BFu16s_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_I, BFu16s_L_I)
//============================================================================


struct  BFu16s_L_Ip  {
  unsigned short v1:16;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu16s_L_Ip) C1{ Fs:16 FL Fp}



static void Test_BFu16s_L_Ip()
{
  {
    init_simple_test("BFu16s_L_Ip");
    static STRUCT_IF_C BFu16s_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_Ip, BFu16s_L_Ip)
//============================================================================


struct  BFu16s_L_L  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_L_L) C1{ Fs:16 FL[2]}



static void Test_BFu16s_L_L()
{
  {
    init_simple_test("BFu16s_L_L");
    static STRUCT_IF_C BFu16s_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_L, BFu16s_L_L)
//============================================================================


struct  BFu16s_L_S  {
  unsigned short v1:16;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu16s_L_S) C1{ Fs:16 FL Fs}



static void Test_BFu16s_L_S()
{
  {
    init_simple_test("BFu16s_L_S");
    static STRUCT_IF_C BFu16s_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_S, BFu16s_L_S)
//============================================================================


struct  BFu16s_L_Uc  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu16s_L_Uc) C1{ Fs:16 FL Fc}



static void Test_BFu16s_L_Uc()
{
  {
    init_simple_test("BFu16s_L_Uc");
    static STRUCT_IF_C BFu16s_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_Uc, BFu16s_L_Uc)
//============================================================================


struct  BFu16s_L_Ui  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu16s_L_Ui) C1{ Fs:16 FL Fi}



static void Test_BFu16s_L_Ui()
{
  {
    init_simple_test("BFu16s_L_Ui");
    static STRUCT_IF_C BFu16s_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_Ui, BFu16s_L_Ui)
//============================================================================


struct  BFu16s_L_Ul  {
  unsigned short v1:16;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_L_Ul) C1{ Fs:16 FL[2]}



static void Test_BFu16s_L_Ul()
{
  {
    init_simple_test("BFu16s_L_Ul");
    static STRUCT_IF_C BFu16s_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu16s_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_Ul, BFu16s_L_Ul)
//============================================================================


struct  BFu16s_L_Us  {
  unsigned short v1:16;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu16s_L_Us) C1{ Fs:16 FL Fs}



static void Test_BFu16s_L_Us()
{
  {
    init_simple_test("BFu16s_L_Us");
    static STRUCT_IF_C BFu16s_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_Us, BFu16s_L_Us)
//============================================================================


struct  BFu16s_L_Vp  {
  unsigned short v1:16;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu16s_L_Vp) C1{ Fs:16 FL Fp}



static void Test_BFu16s_L_Vp()
{
  {
    init_simple_test("BFu16s_L_Vp");
    static STRUCT_IF_C BFu16s_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_L_Vp, BFu16s_L_Vp)
//============================================================================


struct  BFu16s_S  {
  unsigned short v1:16;
  short v2;
};
//SIG(1 BFu16s_S) C1{ Fs:16 Fs}



static void Test_BFu16s_S()
{
  {
    init_simple_test("BFu16s_S");
    static STRUCT_IF_C BFu16s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S");
    check_field_offset(lv, v2, 2, "BFu16s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S, BFu16s_S)
//============================================================================


struct  BFu16s_S_BFu15i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_S_BFu15i) C1{ Fs:16 Fs Fi:15}



static void Test_BFu16s_S_BFu15i()
{
  {
    init_simple_test("BFu16s_S_BFu15i");
    static STRUCT_IF_C BFu16s_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu15i, BFu16s_S_BFu15i)
//============================================================================


struct  BFu16s_S_BFu15ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_S_BFu15ll) C1{ Fs:16 Fs FL:15}



static void Test_BFu16s_S_BFu15ll()
{
  {
    init_simple_test("BFu16s_S_BFu15ll");
    static STRUCT_IF_C BFu16s_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu15ll, BFu16s_S_BFu15ll)
//============================================================================


struct  BFu16s_S_BFu15s  {
  unsigned short v1:16;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_S_BFu15s) C1{ Fs:16 Fs Fs:15}



static void Test_BFu16s_S_BFu15s()
{
  {
    init_simple_test("BFu16s_S_BFu15s");
    static STRUCT_IF_C BFu16s_S_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu15s, BFu16s_S_BFu15s)
//============================================================================


struct  BFu16s_S_BFu16i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_S_BFu16i) C1{ Fs:16 Fs Fi:16}



static void Test_BFu16s_S_BFu16i()
{
  {
    init_simple_test("BFu16s_S_BFu16i");
    static STRUCT_IF_C BFu16s_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu16i, BFu16s_S_BFu16i)
//============================================================================


struct  BFu16s_S_BFu16ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_S_BFu16ll) C1{ Fs:16 Fs FL:16}



static void Test_BFu16s_S_BFu16ll()
{
  {
    init_simple_test("BFu16s_S_BFu16ll");
    static STRUCT_IF_C BFu16s_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu16ll, BFu16s_S_BFu16ll)
//============================================================================


struct  BFu16s_S_BFu16s  {
  unsigned short v1:16;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_S_BFu16s) C1{ Fs:16 Fs Fs:16}



static void Test_BFu16s_S_BFu16s()
{
  {
    init_simple_test("BFu16s_S_BFu16s");
    static STRUCT_IF_C BFu16s_S_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu16s, BFu16s_S_BFu16s)
//============================================================================


struct  BFu16s_S_BFu17i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_S_BFu17i) C1{ Fs:16 Fs Fi:17}



static void Test_BFu16s_S_BFu17i()
{
  {
    init_simple_test("BFu16s_S_BFu17i");
    static STRUCT_IF_C BFu16s_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu17i, BFu16s_S_BFu17i)
//============================================================================


struct  BFu16s_S_BFu17ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_S_BFu17ll) C1{ Fs:16 Fs FL:17}



static void Test_BFu16s_S_BFu17ll()
{
  {
    init_simple_test("BFu16s_S_BFu17ll");
    static STRUCT_IF_C BFu16s_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu17ll, BFu16s_S_BFu17ll)
//============================================================================


struct  BFu16s_S_BFu1c  {
  unsigned short v1:16;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_S_BFu1c) C1{ Fs:16 Fs Fc:1}



static void Test_BFu16s_S_BFu1c()
{
  {
    init_simple_test("BFu16s_S_BFu1c");
    static STRUCT_IF_C BFu16s_S_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu1c, BFu16s_S_BFu1c)
//============================================================================


struct  BFu16s_S_BFu1i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_S_BFu1i) C1{ Fs:16 Fs Fi:1}



static void Test_BFu16s_S_BFu1i()
{
  {
    init_simple_test("BFu16s_S_BFu1i");
    static STRUCT_IF_C BFu16s_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu1i, BFu16s_S_BFu1i)
//============================================================================


struct  BFu16s_S_BFu1ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_S_BFu1ll) C1{ Fs:16 Fs FL:1}



static void Test_BFu16s_S_BFu1ll()
{
  {
    init_simple_test("BFu16s_S_BFu1ll");
    static STRUCT_IF_C BFu16s_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu1ll, BFu16s_S_BFu1ll)
//============================================================================


struct  BFu16s_S_BFu1s  {
  unsigned short v1:16;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_S_BFu1s) C1{ Fs:16 Fs Fs:1}



static void Test_BFu16s_S_BFu1s()
{
  {
    init_simple_test("BFu16s_S_BFu1s");
    static STRUCT_IF_C BFu16s_S_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu16s_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu1s, BFu16s_S_BFu1s)
//============================================================================


struct  BFu16s_S_BFu31i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_S_BFu31i) C1{ Fs:16 Fs Fi:31}



static void Test_BFu16s_S_BFu31i()
{
  {
    init_simple_test("BFu16s_S_BFu31i");
    static STRUCT_IF_C BFu16s_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu31i, BFu16s_S_BFu31i)
//============================================================================


struct  BFu16s_S_BFu31ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_S_BFu31ll) C1{ Fs:16 Fs FL:31}



static void Test_BFu16s_S_BFu31ll()
{
  {
    init_simple_test("BFu16s_S_BFu31ll");
    static STRUCT_IF_C BFu16s_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu31ll, BFu16s_S_BFu31ll)
//============================================================================


struct  BFu16s_S_BFu32i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_S_BFu32i) C1{ Fs:16 Fs Fi:32}



static void Test_BFu16s_S_BFu32i()
{
  {
    init_simple_test("BFu16s_S_BFu32i");
    static STRUCT_IF_C BFu16s_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu32i, BFu16s_S_BFu32i)
//============================================================================


struct  BFu16s_S_BFu32ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_S_BFu32ll) C1{ Fs:16 Fs FL:32}



static void Test_BFu16s_S_BFu32ll()
{
  {
    init_simple_test("BFu16s_S_BFu32ll");
    static STRUCT_IF_C BFu16s_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu32ll, BFu16s_S_BFu32ll)
//============================================================================


struct  BFu16s_S_BFu33  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_S_BFu33) C1{ Fs:16 Fs FL:33}



static void Test_BFu16s_S_BFu33()
{
  {
    init_simple_test("BFu16s_S_BFu33");
    static STRUCT_IF_C BFu16s_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu33");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu16s_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu16s_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu33, BFu16s_S_BFu33)
//============================================================================


struct  BFu16s_S_BFu7c  {
  unsigned short v1:16;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_S_BFu7c) C1{ Fs:16 Fs Fc:7}



static void Test_BFu16s_S_BFu7c()
{
  {
    init_simple_test("BFu16s_S_BFu7c");
    static STRUCT_IF_C BFu16s_S_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu7c, BFu16s_S_BFu7c)
//============================================================================


struct  BFu16s_S_BFu7i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_S_BFu7i) C1{ Fs:16 Fs Fi:7}



static void Test_BFu16s_S_BFu7i()
{
  {
    init_simple_test("BFu16s_S_BFu7i");
    static STRUCT_IF_C BFu16s_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu7i, BFu16s_S_BFu7i)
//============================================================================


struct  BFu16s_S_BFu7ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_S_BFu7ll) C1{ Fs:16 Fs FL:7}



static void Test_BFu16s_S_BFu7ll()
{
  {
    init_simple_test("BFu16s_S_BFu7ll");
    static STRUCT_IF_C BFu16s_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu7ll, BFu16s_S_BFu7ll)
//============================================================================


struct  BFu16s_S_BFu7s  {
  unsigned short v1:16;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_S_BFu7s) C1{ Fs:16 Fs Fs:7}



static void Test_BFu16s_S_BFu7s()
{
  {
    init_simple_test("BFu16s_S_BFu7s");
    static STRUCT_IF_C BFu16s_S_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu16s_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu16s_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu7s, BFu16s_S_BFu7s)
//============================================================================


struct  BFu16s_S_BFu8c  {
  unsigned short v1:16;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_S_BFu8c) C1{ Fs:16 Fs Fc:8}



static void Test_BFu16s_S_BFu8c()
{
  {
    init_simple_test("BFu16s_S_BFu8c");
    static STRUCT_IF_C BFu16s_S_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu8c, BFu16s_S_BFu8c)
//============================================================================


struct  BFu16s_S_BFu8i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_S_BFu8i) C1{ Fs:16 Fs Fi:8}



static void Test_BFu16s_S_BFu8i()
{
  {
    init_simple_test("BFu16s_S_BFu8i");
    static STRUCT_IF_C BFu16s_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu8i, BFu16s_S_BFu8i)
//============================================================================


struct  BFu16s_S_BFu8ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_S_BFu8ll) C1{ Fs:16 Fs FL:8}



static void Test_BFu16s_S_BFu8ll()
{
  {
    init_simple_test("BFu16s_S_BFu8ll");
    static STRUCT_IF_C BFu16s_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu8ll, BFu16s_S_BFu8ll)
//============================================================================


struct  BFu16s_S_BFu8s  {
  unsigned short v1:16;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_S_BFu8s) C1{ Fs:16 Fs Fs:8}



static void Test_BFu16s_S_BFu8s()
{
  {
    init_simple_test("BFu16s_S_BFu8s");
    static STRUCT_IF_C BFu16s_S_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu16s_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu16s_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu8s, BFu16s_S_BFu8s)
//============================================================================


struct  BFu16s_S_BFu9i  {
  unsigned short v1:16;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_S_BFu9i) C1{ Fs:16 Fs Fi:9}



static void Test_BFu16s_S_BFu9i()
{
  {
    init_simple_test("BFu16s_S_BFu9i");
    static STRUCT_IF_C BFu16s_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu9i, BFu16s_S_BFu9i)
//============================================================================


struct  BFu16s_S_BFu9ll  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_S_BFu9ll) C1{ Fs:16 Fs FL:9}



static void Test_BFu16s_S_BFu9ll()
{
  {
    init_simple_test("BFu16s_S_BFu9ll");
    static STRUCT_IF_C BFu16s_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu9ll, BFu16s_S_BFu9ll)
//============================================================================


struct  BFu16s_S_BFu9s  {
  unsigned short v1:16;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_S_BFu9s) C1{ Fs:16 Fs Fs:9}



static void Test_BFu16s_S_BFu9s()
{
  {
    init_simple_test("BFu16s_S_BFu9s");
    static STRUCT_IF_C BFu16s_S_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16s_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_BFu9s, BFu16s_S_BFu9s)
//============================================================================


struct  BFu16s_S_C  {
  unsigned short v1:16;
  short v2;
  char v3;
};
//SIG(1 BFu16s_S_C) C1{ Fs:16 Fs Fc}



static void Test_BFu16s_S_C()
{
  {
    init_simple_test("BFu16s_S_C");
    static STRUCT_IF_C BFu16s_S_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_C");
    check_field_offset(lv, v2, 2, "BFu16s_S_C.v2");
    check_field_offset(lv, v3, 4, "BFu16s_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_C, BFu16s_S_C)
//============================================================================


struct  BFu16s_S_D  {
  unsigned short v1:16;
  short v2;
  double v3;
};
//SIG(1 BFu16s_S_D) C1{ Fs:16 Fs FL}



static void Test_BFu16s_S_D()
{
  {
    init_simple_test("BFu16s_S_D");
    static STRUCT_IF_C BFu16s_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_D");
    check_field_offset(lv, v2, 2, "BFu16s_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_D, BFu16s_S_D)
//============================================================================


struct  BFu16s_S_F  {
  unsigned short v1:16;
  short v2;
  float v3;
};
//SIG(1 BFu16s_S_F) C1{ Fs:16 Fs Fi}



static void Test_BFu16s_S_F()
{
  {
    init_simple_test("BFu16s_S_F");
    static STRUCT_IF_C BFu16s_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_F");
    check_field_offset(lv, v2, 2, "BFu16s_S_F.v2");
    check_field_offset(lv, v3, 4, "BFu16s_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_F, BFu16s_S_F)
//============================================================================


struct  BFu16s_S_I  {
  unsigned short v1:16;
  short v2;
  int v3;
};
//SIG(1 BFu16s_S_I) C1{ Fs:16 Fs Fi}



static void Test_BFu16s_S_I()
{
  {
    init_simple_test("BFu16s_S_I");
    static STRUCT_IF_C BFu16s_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_I");
    check_field_offset(lv, v2, 2, "BFu16s_S_I.v2");
    check_field_offset(lv, v3, 4, "BFu16s_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_I, BFu16s_S_I)
//============================================================================


struct  BFu16s_S_Ip  {
  unsigned short v1:16;
  short v2;
  int *v3;
};
//SIG(1 BFu16s_S_Ip) C1{ Fs:16 Fs Fp}



static void Test_BFu16s_S_Ip()
{
  {
    init_simple_test("BFu16s_S_Ip");
    static STRUCT_IF_C BFu16s_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_Ip");
    check_field_offset(lv, v2, 2, "BFu16s_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_Ip, BFu16s_S_Ip)
//============================================================================


struct  BFu16s_S_L  {
  unsigned short v1:16;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_S_L) C1{ Fs:16 Fs FL}



static void Test_BFu16s_S_L()
{
  {
    init_simple_test("BFu16s_S_L");
    static STRUCT_IF_C BFu16s_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_L");
    check_field_offset(lv, v2, 2, "BFu16s_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_L, BFu16s_S_L)
//============================================================================


struct  BFu16s_S_S  {
  unsigned short v1:16;
  short v2;
  short v3;
};
//SIG(1 BFu16s_S_S) C1{ Fs:16 Fs[2]}



static void Test_BFu16s_S_S()
{
  {
    init_simple_test("BFu16s_S_S");
    static STRUCT_IF_C BFu16s_S_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_S");
    check_field_offset(lv, v2, 2, "BFu16s_S_S.v2");
    check_field_offset(lv, v3, 4, "BFu16s_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_S, BFu16s_S_S)
//============================================================================


struct  BFu16s_S_Uc  {
  unsigned short v1:16;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu16s_S_Uc) C1{ Fs:16 Fs Fc}



static void Test_BFu16s_S_Uc()
{
  {
    init_simple_test("BFu16s_S_Uc");
    static STRUCT_IF_C BFu16s_S_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_Uc");
    check_field_offset(lv, v2, 2, "BFu16s_S_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu16s_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_Uc, BFu16s_S_Uc)
//============================================================================


struct  BFu16s_S_Ui  {
  unsigned short v1:16;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu16s_S_Ui) C1{ Fs:16 Fs Fi}



static void Test_BFu16s_S_Ui()
{
  {
    init_simple_test("BFu16s_S_Ui");
    static STRUCT_IF_C BFu16s_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_Ui");
    check_field_offset(lv, v2, 2, "BFu16s_S_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16s_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_Ui, BFu16s_S_Ui)
//============================================================================


struct  BFu16s_S_Ul  {
  unsigned short v1:16;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_S_Ul) C1{ Fs:16 Fs FL}



static void Test_BFu16s_S_Ul()
{
  {
    init_simple_test("BFu16s_S_Ul");
    static STRUCT_IF_C BFu16s_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_Ul");
    check_field_offset(lv, v2, 2, "BFu16s_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_Ul, BFu16s_S_Ul)
//============================================================================


struct  BFu16s_S_Us  {
  unsigned short v1:16;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu16s_S_Us) C1{ Fs:16 Fs[2]}



static void Test_BFu16s_S_Us()
{
  {
    init_simple_test("BFu16s_S_Us");
    static STRUCT_IF_C BFu16s_S_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_Us");
    check_field_offset(lv, v2, 2, "BFu16s_S_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16s_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_Us, BFu16s_S_Us)
//============================================================================


struct  BFu16s_S_Vp  {
  unsigned short v1:16;
  short v2;
  void *v3;
};
//SIG(1 BFu16s_S_Vp) C1{ Fs:16 Fs Fp}



static void Test_BFu16s_S_Vp()
{
  {
    init_simple_test("BFu16s_S_Vp");
    static STRUCT_IF_C BFu16s_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_Vp");
    check_field_offset(lv, v2, 2, "BFu16s_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_S_Vp, BFu16s_S_Vp)
//============================================================================


struct  BFu16s_Uc  {
  unsigned short v1:16;
  unsigned char v2;
};
//SIG(1 BFu16s_Uc) C1{ Fs:16 Fc}



static void Test_BFu16s_Uc()
{
  {
    init_simple_test("BFu16s_Uc");
    static STRUCT_IF_C BFu16s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc");
    check_field_offset(lv, v2, 2, "BFu16s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc, BFu16s_Uc)
//============================================================================


struct  BFu16s_Uc_BFu15i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_Uc_BFu15i) C1{ Fs:16 Fc Fi:15}



static void Test_BFu16s_Uc_BFu15i()
{
  {
    init_simple_test("BFu16s_Uc_BFu15i");
    static STRUCT_IF_C BFu16s_Uc_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_Uc_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu15i, BFu16s_Uc_BFu15i)
//============================================================================


struct  BFu16s_Uc_BFu15ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_Uc_BFu15ll) C1{ Fs:16 Fc FL:15}



static void Test_BFu16s_Uc_BFu15ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu15ll");
    static STRUCT_IF_C BFu16s_Uc_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16s_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16s_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu15ll, BFu16s_Uc_BFu15ll)
//============================================================================


struct  BFu16s_Uc_BFu15s  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_Uc_BFu15s) C1{ Fs:16 Fc Fs:15}



static void Test_BFu16s_Uc_BFu15s()
{
  {
    init_simple_test("BFu16s_Uc_BFu15s");
    static STRUCT_IF_C BFu16s_Uc_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Uc_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_Uc_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu15s, BFu16s_Uc_BFu15s)
//============================================================================


struct  BFu16s_Uc_BFu16i  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_Uc_BFu16i) C1{ Fs:16 Fc Fi:16}



static void Test_BFu16s_Uc_BFu16i()
{
  {
    init_simple_test("BFu16s_Uc_BFu16i");
    static STRUCT_IF_C BFu16s_Uc_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_Uc_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu16i, BFu16s_Uc_BFu16i)
//============================================================================


struct  BFu16s_Uc_BFu16ll  {
  unsigned short v1:16;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_Uc_BFu16ll) C1{ Fs:16 Fc FL:16}



static void Test_BFu16s_Uc_BFu16ll()
{
  {
    init_simple_test("BFu16s_Uc_BFu16ll");
    static STRUCT_IF_C BFu16s_Uc_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16s_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu16ll, BFu16s_Uc_BFu16ll)
//============================================================================


struct  BFu16s_Uc_BFu16s  {
  unsigned short v1:16;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_Uc_BFu16s) C1{ Fs:16 Fc Fs:16}



static void Test_BFu16s_Uc_BFu16s()
{
  {
    init_simple_test("BFu16s_Uc_BFu16s");
    static STRUCT_IF_C BFu16s_Uc_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Uc_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_Uc_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu16s_Uc_BFu16s, BFu16s_Uc_BFu16s)
//============================================================================

