// 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"
#include "testsuite.h"

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



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


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



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


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



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


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



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


struct  BFu0ll_BFu7i_BFu7i  {
  __tsu64  :0;
  unsigned int v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_BFu7i_BFu7i) C1{ FL:0 Fi:7 Fi:7}



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


struct  BFu0ll_BFu7i_BFu7ll  {
  __tsu64  :0;
  unsigned int v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu7i_BFu7ll) C1{ FL:0 Fi:7 FL:7}



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


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



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


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



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


struct  BFu0ll_BFu7i_BFu8i  {
  __tsu64  :0;
  unsigned int v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_BFu7i_BFu8i) C1{ FL:0 Fi:7 Fi:8}



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


struct  BFu0ll_BFu7i_BFu8ll  {
  __tsu64  :0;
  unsigned int v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu7i_BFu8ll) C1{ FL:0 Fi:7 FL:8}



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


struct  BFu0ll_BFu7i_BFu8s  {
  __tsu64  :0;
  unsigned int v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_BFu7i_BFu8s) C1{ FL:0 Fi:7 Fs:8}



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


struct  BFu0ll_BFu7i_BFu9i  {
  __tsu64  :0;
  unsigned int v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu7i_BFu9i) C1{ FL:0 Fi:7 Fi:9}



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


struct  BFu0ll_BFu7i_BFu9ll  {
  __tsu64  :0;
  unsigned int v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu7i_BFu9ll) C1{ FL:0 Fi:7 FL:9}



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


struct  BFu0ll_BFu7i_BFu9s  {
  __tsu64  :0;
  unsigned int v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu7i_BFu9s) C1{ FL:0 Fi:7 Fs:9}



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


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



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


struct  BFu0ll_BFu7i_D  {
  __tsu64  :0;
  unsigned int v1:7;
  double v2;
};
//SIG(1 BFu0ll_BFu7i_D) C1{ FL:0 Fi:7 FL}



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


struct  BFu0ll_BFu7i_F  {
  __tsu64  :0;
  unsigned int v1:7;
  float v2;
};
//SIG(1 BFu0ll_BFu7i_F) C1{ FL:0 Fi:7 Fi}



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


struct  BFu0ll_BFu7i_I  {
  __tsu64  :0;
  unsigned int v1:7;
  int v2;
};
//SIG(1 BFu0ll_BFu7i_I) C1{ FL:0 Fi:7 Fi}



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


struct  BFu0ll_BFu7i_Ip  {
  __tsu64  :0;
  unsigned int v1:7;
  int *v2;
};
//SIG(1 BFu0ll_BFu7i_Ip) C1{ FL:0 Fi:7 Fp}



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


struct  BFu0ll_BFu7i_L  {
  __tsu64  :0;
  unsigned int v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu7i_L) C1{ FL:0 Fi:7 FL}



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


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



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


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



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


struct  BFu0ll_BFu7i_Ui  {
  __tsu64  :0;
  unsigned int v1:7;
  unsigned int v2;
};
//SIG(1 BFu0ll_BFu7i_Ui) C1{ FL:0 Fi:7 Fi}



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


struct  BFu0ll_BFu7i_Ul  {
  __tsu64  :0;
  unsigned int v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu7i_Ul) C1{ FL:0 Fi:7 FL}



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


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



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


struct  BFu0ll_BFu7i_Vp  {
  __tsu64  :0;
  unsigned int v1:7;
  void *v2;
};
//SIG(1 BFu0ll_BFu7i_Vp) C1{ FL:0 Fi:7 Fp}



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


struct  BFu0ll_BFu7ll  {
  __tsu64  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0ll_BFu7ll) C1{ FL:0 FL:7}



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


struct  BFu0ll_BFu7ll_BFu0c  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu7ll_BFu0c) C1{ FL:0 FL:7 Fc:0}



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


struct  BFu0ll_BFu7ll_BFu0i  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu7ll_BFu0i) C1{ FL:0 FL:7 Fi:0}



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


struct  BFu0ll_BFu7ll_BFu0ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu7ll_BFu0ll) C1{ FL:0 FL:7 FL:0}



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


struct  BFu0ll_BFu7ll_BFu0s  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu7ll_BFu0s) C1{ FL:0 FL:7 Fs:0}



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


struct  BFu0ll_BFu7ll_BFu15i  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_BFu7ll_BFu15i) C1{ FL:0 FL:7 Fi:15}



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


struct  BFu0ll_BFu7ll_BFu15ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_BFu7ll_BFu15ll) C1{ FL:0 FL:7 FL:15}



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


struct  BFu0ll_BFu7ll_BFu15s  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_BFu7ll_BFu15s) C1{ FL:0 FL:7 Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_BFu7ll_BFu17i  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu7ll_BFu17i) C1{ FL:0 FL:7 Fi:17}



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


struct  BFu0ll_BFu7ll_BFu17ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu7ll_BFu17ll) C1{ FL:0 FL:7 FL:17}



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


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



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


struct  BFu0ll_BFu7ll_BFu1i  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_BFu7ll_BFu1i) C1{ FL:0 FL:7 Fi:1}



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


struct  BFu0ll_BFu7ll_BFu1ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu7ll_BFu1ll) C1{ FL:0 FL:7 FL:1}



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


struct  BFu0ll_BFu7ll_BFu1s  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_BFu7ll_BFu1s) C1{ FL:0 FL:7 Fs:1}



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


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



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


struct  BFu0ll_BFu7ll_BFu31ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_BFu7ll_BFu31ll) C1{ FL:0 FL:7 FL:31}



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


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



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


struct  BFu0ll_BFu7ll_BFu32ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_BFu7ll_BFu32ll) C1{ FL:0 FL:7 FL:32}



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


struct  BFu0ll_BFu7ll_BFu33  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_BFu7ll_BFu33) C1{ FL:0 FL:7 FL:33}



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


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



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


struct  BFu0ll_BFu7ll_BFu7i  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_BFu7ll_BFu7i) C1{ FL:0 FL:7 Fi:7}



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


struct  BFu0ll_BFu7ll_BFu7ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu7ll_BFu7ll) C1{ FL:0 FL:7 FL:7}



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


struct  BFu0ll_BFu7ll_BFu7s  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_BFu7ll_BFu7s) C1{ FL:0 FL:7 Fs:7}



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


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



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


struct  BFu0ll_BFu7ll_BFu8i  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_BFu7ll_BFu8i) C1{ FL:0 FL:7 Fi:8}



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


struct  BFu0ll_BFu7ll_BFu8ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu7ll_BFu8ll) C1{ FL:0 FL:7 FL:8}



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


struct  BFu0ll_BFu7ll_BFu8s  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_BFu7ll_BFu8s) C1{ FL:0 FL:7 Fs:8}



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


struct  BFu0ll_BFu7ll_BFu9i  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu7ll_BFu9i) C1{ FL:0 FL:7 Fi:9}



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


struct  BFu0ll_BFu7ll_BFu9ll  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu7ll_BFu9ll) C1{ FL:0 FL:7 FL:9}



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


struct  BFu0ll_BFu7ll_BFu9s  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu7ll_BFu9s) C1{ FL:0 FL:7 Fs:9}



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


struct  BFu0ll_BFu7ll_C  {
  __tsu64  :0;
  __tsu64 v1:7;
  char v2;
};
//SIG(1 BFu0ll_BFu7ll_C) C1{ FL:0 FL:7 Fc}



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


struct  BFu0ll_BFu7ll_D  {
  __tsu64  :0;
  __tsu64 v1:7;
  double v2;
};
//SIG(1 BFu0ll_BFu7ll_D) C1{ FL:0 FL:7 FL}



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


struct  BFu0ll_BFu7ll_F  {
  __tsu64  :0;
  __tsu64 v1:7;
  float v2;
};
//SIG(1 BFu0ll_BFu7ll_F) C1{ FL:0 FL:7 Fi}



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


struct  BFu0ll_BFu7ll_I  {
  __tsu64  :0;
  __tsu64 v1:7;
  int v2;
};
//SIG(1 BFu0ll_BFu7ll_I) C1{ FL:0 FL:7 Fi}



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


struct  BFu0ll_BFu7ll_Ip  {
  __tsu64  :0;
  __tsu64 v1:7;
  int *v2;
};
//SIG(1 BFu0ll_BFu7ll_Ip) C1{ FL:0 FL:7 Fp}



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


struct  BFu0ll_BFu7ll_L  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu7ll_L) C1{ FL:0 FL:7 FL}



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


struct  BFu0ll_BFu7ll_S  {
  __tsu64  :0;
  __tsu64 v1:7;
  short v2;
};
//SIG(1 BFu0ll_BFu7ll_S) C1{ FL:0 FL:7 Fs}



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


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



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


struct  BFu0ll_BFu7ll_Ui  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned int v2;
};
//SIG(1 BFu0ll_BFu7ll_Ui) C1{ FL:0 FL:7 Fi}



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


struct  BFu0ll_BFu7ll_Ul  {
  __tsu64  :0;
  __tsu64 v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu7ll_Ul) C1{ FL:0 FL:7 FL}



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


struct  BFu0ll_BFu7ll_Us  {
  __tsu64  :0;
  __tsu64 v1:7;
  unsigned short v2;
};
//SIG(1 BFu0ll_BFu7ll_Us) C1{ FL:0 FL:7 Fs}



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


struct  BFu0ll_BFu7ll_Vp  {
  __tsu64  :0;
  __tsu64 v1:7;
  void *v2;
};
//SIG(1 BFu0ll_BFu7ll_Vp) C1{ FL:0 FL:7 Fp}



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


struct  BFu0ll_BFu7s  {
  __tsu64  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0ll_BFu7s) C1{ FL:0 Fs:7}



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


struct  BFu0ll_BFu7s_BFu0c  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu7s_BFu0c) C1{ FL:0 Fs:7 Fc:0}



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


struct  BFu0ll_BFu7s_BFu0i  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu7s_BFu0i) C1{ FL:0 Fs:7 Fi:0}



static void Test_BFu0ll_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu0ll_BFu7s_BFu0i");
    static STRUCT_IF_C BFu0ll_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0ll_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu7s_BFu0i, BFu0ll_BFu7s_BFu0i)
//============================================================================


struct  BFu0ll_BFu7s_BFu0ll  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu7s_BFu0ll) C1{ FL:0 Fs:7 FL:0}



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


struct  BFu0ll_BFu7s_BFu0s  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu7s_BFu0s) C1{ FL:0 Fs:7 Fs:0}



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


struct  BFu0ll_BFu7s_BFu15i  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_BFu7s_BFu15i) C1{ FL:0 Fs:7 Fi:15}



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


struct  BFu0ll_BFu7s_BFu15ll  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_BFu7s_BFu15ll) C1{ FL:0 Fs:7 FL:15}



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


struct  BFu0ll_BFu7s_BFu15s  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_BFu7s_BFu15s) C1{ FL:0 Fs:7 Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_BFu7s_BFu17i  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu7s_BFu17i) C1{ FL:0 Fs:7 Fi:17}



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


struct  BFu0ll_BFu7s_BFu17ll  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu7s_BFu17ll) C1{ FL:0 Fs:7 FL:17}



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


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



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


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



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


struct  BFu0ll_BFu7s_BFu1ll  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu7s_BFu1ll) C1{ FL:0 Fs:7 FL:1}



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


struct  BFu0ll_BFu7s_BFu1s  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_BFu7s_BFu1s) C1{ FL:0 Fs:7 Fs:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu0ll_BFu7s_BFu7ll  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu7s_BFu7ll) C1{ FL:0 Fs:7 FL:7}



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


struct  BFu0ll_BFu7s_BFu7s  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_BFu7s_BFu7s) C1{ FL:0 Fs:7 Fs:7}



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


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



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


struct  BFu0ll_BFu7s_BFu8i  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_BFu7s_BFu8i) C1{ FL:0 Fs:7 Fi:8}



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


struct  BFu0ll_BFu7s_BFu8ll  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu7s_BFu8ll) C1{ FL:0 Fs:7 FL:8}



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


struct  BFu0ll_BFu7s_BFu8s  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_BFu7s_BFu8s) C1{ FL:0 Fs:7 Fs:8}



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


struct  BFu0ll_BFu7s_BFu9i  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu7s_BFu9i) C1{ FL:0 Fs:7 Fi:9}



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


struct  BFu0ll_BFu7s_BFu9ll  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu7s_BFu9ll) C1{ FL:0 Fs:7 FL:9}



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


struct  BFu0ll_BFu7s_BFu9s  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu7s_BFu9s) C1{ FL:0 Fs:7 Fs:9}



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


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



static void Test_BFu0ll_BFu7s_C()
{
  {
    init_simple_test("BFu0ll_BFu7s_C");
    static STRUCT_IF_C BFu0ll_BFu7s_C lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu7s_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0ll_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0ll_BFu7s_C");
    check_field_offset(lv, v2, 1, "BFu0ll_BFu7s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu7s_C, BFu0ll_BFu7s_C)
//============================================================================


struct  BFu0ll_BFu7s_D  {
  __tsu64  :0;
  unsigned short v1:7;
  double v2;
};
//SIG(1 BFu0ll_BFu7s_D) C1{ FL:0 Fs:7 FL}



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


struct  BFu0ll_BFu7s_F  {
  __tsu64  :0;
  unsigned short v1:7;
  float v2;
};
//SIG(1 BFu0ll_BFu7s_F) C1{ FL:0 Fs:7 Fi}



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


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



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


struct  BFu0ll_BFu7s_Ip  {
  __tsu64  :0;
  unsigned short v1:7;
  int *v2;
};
//SIG(1 BFu0ll_BFu7s_Ip) C1{ FL:0 Fs:7 Fp}



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


struct  BFu0ll_BFu7s_L  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu7s_L) C1{ FL:0 Fs:7 FL}



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


struct  BFu0ll_BFu7s_S  {
  __tsu64  :0;
  unsigned short v1:7;
  short v2;
};
//SIG(1 BFu0ll_BFu7s_S) C1{ FL:0 Fs:7 Fs}



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


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



static void Test_BFu0ll_BFu7s_Uc()
{
  {
    init_simple_test("BFu0ll_BFu7s_Uc");
    static STRUCT_IF_C BFu0ll_BFu7s_Uc lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu7s_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0ll_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0ll_BFu7s_Uc");
    check_field_offset(lv, v2, 1, "BFu0ll_BFu7s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu7s_Uc, BFu0ll_BFu7s_Uc)
//============================================================================


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



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


struct  BFu0ll_BFu7s_Ul  {
  __tsu64  :0;
  unsigned short v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu7s_Ul) C1{ FL:0 Fs:7 FL}



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


struct  BFu0ll_BFu7s_Us  {
  __tsu64  :0;
  unsigned short v1:7;
  unsigned short v2;
};
//SIG(1 BFu0ll_BFu7s_Us) C1{ FL:0 Fs:7 Fs}



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


struct  BFu0ll_BFu7s_Vp  {
  __tsu64  :0;
  unsigned short v1:7;
  void *v2;
};
//SIG(1 BFu0ll_BFu7s_Vp) C1{ FL:0 Fs:7 Fp}



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


struct  BFu0ll_BFu8c  {
  __tsu64  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0ll_BFu8c) C1{ FL:0 Fc:8}



static void Test_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu0ll_BFu8c");
    static STRUCT_IF_C BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu8c, BFu0ll_BFu8c)
//============================================================================


struct  BFu0ll_BFu8c_BFu0c  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu8c_BFu0c) C1{ FL:0 Fc:8 Fc:0}



static void Test_BFu0ll_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu0ll_BFu8c_BFu0c");
    static STRUCT_IF_C BFu0ll_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0ll_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0ll_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu8c_BFu0c, BFu0ll_BFu8c_BFu0c)
//============================================================================


struct  BFu0ll_BFu8c_BFu0i  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu8c_BFu0i) C1{ FL:0 Fc:8 Fi:0}



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


struct  BFu0ll_BFu8c_BFu0ll  {
  __tsu64  :0;
  unsigned char v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu8c_BFu0ll) C1{ FL:0 Fc:8 FL:0}



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


struct  BFu0ll_BFu8c_BFu0s  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu8c_BFu0s) C1{ FL:0 Fc:8 Fs:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu0ll_BFu8c_BFu17i  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu8c_BFu17i) C1{ FL:0 Fc:8 Fi:17}



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


struct  BFu0ll_BFu8c_BFu17ll  {
  __tsu64  :0;
  unsigned char v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu8c_BFu17ll) C1{ FL:0 Fc:8 FL:17}



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


struct  BFu0ll_BFu8c_BFu1c  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_BFu8c_BFu1c) C1{ FL:0 Fc:8 Fc:1}



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


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



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


struct  BFu0ll_BFu8c_BFu1ll  {
  __tsu64  :0;
  unsigned char v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu8c_BFu1ll) C1{ FL:0 Fc:8 FL:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu0ll_BFu8c_BFu8c  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_BFu8c_BFu8c) C1{ FL:0 Fc:8 Fc:8}



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


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



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


struct  BFu0ll_BFu8c_BFu8ll  {
  __tsu64  :0;
  unsigned char v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu8c_BFu8ll) C1{ FL:0 Fc:8 FL:8}



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


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



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


struct  BFu0ll_BFu8c_BFu9i  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu8c_BFu9i) C1{ FL:0 Fc:8 Fi:9}



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


struct  BFu0ll_BFu8c_BFu9ll  {
  __tsu64  :0;
  unsigned char v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu8c_BFu9ll) C1{ FL:0 Fc:8 FL:9}



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


struct  BFu0ll_BFu8c_BFu9s  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu8c_BFu9s) C1{ FL:0 Fc:8 Fs:9}



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


struct  BFu0ll_BFu8c_C  {
  __tsu64  :0;
  unsigned char v1:8;
  char v2;
};
//SIG(1 BFu0ll_BFu8c_C) C1{ FL:0 Fc:8 Fc}



static void Test_BFu0ll_BFu8c_C()
{
  {
    init_simple_test("BFu0ll_BFu8c_C");
    static STRUCT_IF_C BFu0ll_BFu8c_C lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu8c_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0ll_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0ll_BFu8c_C");
    check_field_offset(lv, v2, 1, "BFu0ll_BFu8c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu8c_C, BFu0ll_BFu8c_C)
//============================================================================


struct  BFu0ll_BFu8c_D  {
  __tsu64  :0;
  unsigned char v1:8;
  double v2;
};
//SIG(1 BFu0ll_BFu8c_D) C1{ FL:0 Fc:8 FL}



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


struct  BFu0ll_BFu8c_F  {
  __tsu64  :0;
  unsigned char v1:8;
  float v2;
};
//SIG(1 BFu0ll_BFu8c_F) C1{ FL:0 Fc:8 Fi}



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


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



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


struct  BFu0ll_BFu8c_Ip  {
  __tsu64  :0;
  unsigned char v1:8;
  int *v2;
};
//SIG(1 BFu0ll_BFu8c_Ip) C1{ FL:0 Fc:8 Fp}



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


struct  BFu0ll_BFu8c_L  {
  __tsu64  :0;
  unsigned char v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu8c_L) C1{ FL:0 Fc:8 FL}



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


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



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


struct  BFu0ll_BFu8c_Uc  {
  __tsu64  :0;
  unsigned char v1:8;
  unsigned char v2;
};
//SIG(1 BFu0ll_BFu8c_Uc) C1{ FL:0 Fc:8 Fc}



static void Test_BFu0ll_BFu8c_Uc()
{
  {
    init_simple_test("BFu0ll_BFu8c_Uc");
    static STRUCT_IF_C BFu0ll_BFu8c_Uc lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu8c_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0ll_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0ll_BFu8c_Uc");
    check_field_offset(lv, v2, 1, "BFu0ll_BFu8c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu8c_Uc, BFu0ll_BFu8c_Uc)
//============================================================================


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



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


struct  BFu0ll_BFu8c_Ul  {
  __tsu64  :0;
  unsigned char v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu8c_Ul) C1{ FL:0 Fc:8 FL}



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


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



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


struct  BFu0ll_BFu8c_Vp  {
  __tsu64  :0;
  unsigned char v1:8;
  void *v2;
};
//SIG(1 BFu0ll_BFu8c_Vp) C1{ FL:0 Fc:8 Fp}



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


struct  BFu0ll_BFu8i  {
  __tsu64  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0ll_BFu8i) C1{ FL:0 Fi:8}



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


struct  BFu0ll_BFu8i_BFu0c  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu8i_BFu0c) C1{ FL:0 Fi:8 Fc:0}



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


struct  BFu0ll_BFu8i_BFu0i  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu8i_BFu0i) C1{ FL:0 Fi:8 Fi:0}



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


struct  BFu0ll_BFu8i_BFu0ll  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu8i_BFu0ll) C1{ FL:0 Fi:8 FL:0}



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


struct  BFu0ll_BFu8i_BFu0s  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu8i_BFu0s) C1{ FL:0 Fi:8 Fs:0}



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


struct  BFu0ll_BFu8i_BFu15i  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_BFu8i_BFu15i) C1{ FL:0 Fi:8 Fi:15}



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


struct  BFu0ll_BFu8i_BFu15ll  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_BFu8i_BFu15ll) C1{ FL:0 Fi:8 FL:15}



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


struct  BFu0ll_BFu8i_BFu15s  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_BFu8i_BFu15s) C1{ FL:0 Fi:8 Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_BFu8i_BFu17i  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu8i_BFu17i) C1{ FL:0 Fi:8 Fi:17}



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


struct  BFu0ll_BFu8i_BFu17ll  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu8i_BFu17ll) C1{ FL:0 Fi:8 FL:17}



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


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



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


struct  BFu0ll_BFu8i_BFu1i  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_BFu8i_BFu1i) C1{ FL:0 Fi:8 Fi:1}



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


struct  BFu0ll_BFu8i_BFu1ll  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu8i_BFu1ll) C1{ FL:0 Fi:8 FL:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu0ll_BFu8i_BFu7i  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_BFu8i_BFu7i) C1{ FL:0 Fi:8 Fi:7}



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


struct  BFu0ll_BFu8i_BFu7ll  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu8i_BFu7ll) C1{ FL:0 Fi:8 FL:7}



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


struct  BFu0ll_BFu8i_BFu7s  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_BFu8i_BFu7s) C1{ FL:0 Fi:8 Fs:7}



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


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



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


struct  BFu0ll_BFu8i_BFu8i  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_BFu8i_BFu8i) C1{ FL:0 Fi:8 Fi:8}



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


struct  BFu0ll_BFu8i_BFu8ll  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu8i_BFu8ll) C1{ FL:0 Fi:8 FL:8}



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


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



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


struct  BFu0ll_BFu8i_BFu9i  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu8i_BFu9i) C1{ FL:0 Fi:8 Fi:9}



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


struct  BFu0ll_BFu8i_BFu9ll  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu8i_BFu9ll) C1{ FL:0 Fi:8 FL:9}



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


struct  BFu0ll_BFu8i_BFu9s  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu8i_BFu9s) C1{ FL:0 Fi:8 Fs:9}



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


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



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


struct  BFu0ll_BFu8i_D  {
  __tsu64  :0;
  unsigned int v1:8;
  double v2;
};
//SIG(1 BFu0ll_BFu8i_D) C1{ FL:0 Fi:8 FL}



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


struct  BFu0ll_BFu8i_F  {
  __tsu64  :0;
  unsigned int v1:8;
  float v2;
};
//SIG(1 BFu0ll_BFu8i_F) C1{ FL:0 Fi:8 Fi}



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


struct  BFu0ll_BFu8i_I  {
  __tsu64  :0;
  unsigned int v1:8;
  int v2;
};
//SIG(1 BFu0ll_BFu8i_I) C1{ FL:0 Fi:8 Fi}



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


struct  BFu0ll_BFu8i_Ip  {
  __tsu64  :0;
  unsigned int v1:8;
  int *v2;
};
//SIG(1 BFu0ll_BFu8i_Ip) C1{ FL:0 Fi:8 Fp}



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


struct  BFu0ll_BFu8i_L  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu8i_L) C1{ FL:0 Fi:8 FL}



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


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



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


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



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


struct  BFu0ll_BFu8i_Ui  {
  __tsu64  :0;
  unsigned int v1:8;
  unsigned int v2;
};
//SIG(1 BFu0ll_BFu8i_Ui) C1{ FL:0 Fi:8 Fi}



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


struct  BFu0ll_BFu8i_Ul  {
  __tsu64  :0;
  unsigned int v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu8i_Ul) C1{ FL:0 Fi:8 FL}



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


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



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


struct  BFu0ll_BFu8i_Vp  {
  __tsu64  :0;
  unsigned int v1:8;
  void *v2;
};
//SIG(1 BFu0ll_BFu8i_Vp) C1{ FL:0 Fi:8 Fp}



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


struct  BFu0ll_BFu8ll  {
  __tsu64  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0ll_BFu8ll) C1{ FL:0 FL:8}



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


struct  BFu0ll_BFu8ll_BFu0c  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu8ll_BFu0c) C1{ FL:0 FL:8 Fc:0}



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


struct  BFu0ll_BFu8ll_BFu0i  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu8ll_BFu0i) C1{ FL:0 FL:8 Fi:0}



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


struct  BFu0ll_BFu8ll_BFu0ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu8ll_BFu0ll) C1{ FL:0 FL:8 FL:0}



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


struct  BFu0ll_BFu8ll_BFu0s  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu8ll_BFu0s) C1{ FL:0 FL:8 Fs:0}



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


struct  BFu0ll_BFu8ll_BFu15i  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_BFu8ll_BFu15i) C1{ FL:0 FL:8 Fi:15}



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


struct  BFu0ll_BFu8ll_BFu15ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_BFu8ll_BFu15ll) C1{ FL:0 FL:8 FL:15}



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


struct  BFu0ll_BFu8ll_BFu15s  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_BFu8ll_BFu15s) C1{ FL:0 FL:8 Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_BFu8ll_BFu17i  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu8ll_BFu17i) C1{ FL:0 FL:8 Fi:17}



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


struct  BFu0ll_BFu8ll_BFu17ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu8ll_BFu17ll) C1{ FL:0 FL:8 FL:17}



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


struct  BFu0ll_BFu8ll_BFu1c  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_BFu8ll_BFu1c) C1{ FL:0 FL:8 Fc:1}



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


struct  BFu0ll_BFu8ll_BFu1i  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_BFu8ll_BFu1i) C1{ FL:0 FL:8 Fi:1}



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


struct  BFu0ll_BFu8ll_BFu1ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu8ll_BFu1ll) C1{ FL:0 FL:8 FL:1}



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


struct  BFu0ll_BFu8ll_BFu1s  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_BFu8ll_BFu1s) C1{ FL:0 FL:8 Fs:1}



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


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



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


struct  BFu0ll_BFu8ll_BFu31ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_BFu8ll_BFu31ll) C1{ FL:0 FL:8 FL:31}



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


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



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


struct  BFu0ll_BFu8ll_BFu32ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_BFu8ll_BFu32ll) C1{ FL:0 FL:8 FL:32}



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


struct  BFu0ll_BFu8ll_BFu33  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_BFu8ll_BFu33) C1{ FL:0 FL:8 FL:33}



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


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



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


struct  BFu0ll_BFu8ll_BFu7i  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_BFu8ll_BFu7i) C1{ FL:0 FL:8 Fi:7}



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


struct  BFu0ll_BFu8ll_BFu7ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu8ll_BFu7ll) C1{ FL:0 FL:8 FL:7}



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


struct  BFu0ll_BFu8ll_BFu7s  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_BFu8ll_BFu7s) C1{ FL:0 FL:8 Fs:7}



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


struct  BFu0ll_BFu8ll_BFu8c  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_BFu8ll_BFu8c) C1{ FL:0 FL:8 Fc:8}



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


struct  BFu0ll_BFu8ll_BFu8i  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_BFu8ll_BFu8i) C1{ FL:0 FL:8 Fi:8}



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


struct  BFu0ll_BFu8ll_BFu8ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu8ll_BFu8ll) C1{ FL:0 FL:8 FL:8}



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


struct  BFu0ll_BFu8ll_BFu8s  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_BFu8ll_BFu8s) C1{ FL:0 FL:8 Fs:8}



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


struct  BFu0ll_BFu8ll_BFu9i  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu8ll_BFu9i) C1{ FL:0 FL:8 Fi:9}



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


struct  BFu0ll_BFu8ll_BFu9ll  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu8ll_BFu9ll) C1{ FL:0 FL:8 FL:9}



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


struct  BFu0ll_BFu8ll_BFu9s  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu8ll_BFu9s) C1{ FL:0 FL:8 Fs:9}



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


struct  BFu0ll_BFu8ll_C  {
  __tsu64  :0;
  __tsu64 v1:8;
  char v2;
};
//SIG(1 BFu0ll_BFu8ll_C) C1{ FL:0 FL:8 Fc}



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


struct  BFu0ll_BFu8ll_D  {
  __tsu64  :0;
  __tsu64 v1:8;
  double v2;
};
//SIG(1 BFu0ll_BFu8ll_D) C1{ FL:0 FL:8 FL}



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


struct  BFu0ll_BFu8ll_F  {
  __tsu64  :0;
  __tsu64 v1:8;
  float v2;
};
//SIG(1 BFu0ll_BFu8ll_F) C1{ FL:0 FL:8 Fi}



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


struct  BFu0ll_BFu8ll_I  {
  __tsu64  :0;
  __tsu64 v1:8;
  int v2;
};
//SIG(1 BFu0ll_BFu8ll_I) C1{ FL:0 FL:8 Fi}



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


struct  BFu0ll_BFu8ll_Ip  {
  __tsu64  :0;
  __tsu64 v1:8;
  int *v2;
};
//SIG(1 BFu0ll_BFu8ll_Ip) C1{ FL:0 FL:8 Fp}



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


struct  BFu0ll_BFu8ll_L  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu8ll_L) C1{ FL:0 FL:8 FL}



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


struct  BFu0ll_BFu8ll_S  {
  __tsu64  :0;
  __tsu64 v1:8;
  short v2;
};
//SIG(1 BFu0ll_BFu8ll_S) C1{ FL:0 FL:8 Fs}



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


struct  BFu0ll_BFu8ll_Uc  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned char v2;
};
//SIG(1 BFu0ll_BFu8ll_Uc) C1{ FL:0 FL:8 Fc}



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


struct  BFu0ll_BFu8ll_Ui  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned int v2;
};
//SIG(1 BFu0ll_BFu8ll_Ui) C1{ FL:0 FL:8 Fi}



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


struct  BFu0ll_BFu8ll_Ul  {
  __tsu64  :0;
  __tsu64 v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu8ll_Ul) C1{ FL:0 FL:8 FL}



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


struct  BFu0ll_BFu8ll_Us  {
  __tsu64  :0;
  __tsu64 v1:8;
  unsigned short v2;
};
//SIG(1 BFu0ll_BFu8ll_Us) C1{ FL:0 FL:8 Fs}



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


struct  BFu0ll_BFu8ll_Vp  {
  __tsu64  :0;
  __tsu64 v1:8;
  void *v2;
};
//SIG(1 BFu0ll_BFu8ll_Vp) C1{ FL:0 FL:8 Fp}



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


struct  BFu0ll_BFu8s  {
  __tsu64  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0ll_BFu8s) C1{ FL:0 Fs:8}



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


struct  BFu0ll_BFu8s_BFu0c  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu8s_BFu0c) C1{ FL:0 Fs:8 Fc:0}



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


struct  BFu0ll_BFu8s_BFu0i  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu8s_BFu0i) C1{ FL:0 Fs:8 Fi:0}



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


struct  BFu0ll_BFu8s_BFu0ll  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu8s_BFu0ll) C1{ FL:0 Fs:8 FL:0}



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


struct  BFu0ll_BFu8s_BFu0s  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu8s_BFu0s) C1{ FL:0 Fs:8 Fs:0}



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


struct  BFu0ll_BFu8s_BFu15i  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_BFu8s_BFu15i) C1{ FL:0 Fs:8 Fi:15}



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


struct  BFu0ll_BFu8s_BFu15ll  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_BFu8s_BFu15ll) C1{ FL:0 Fs:8 FL:15}



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


struct  BFu0ll_BFu8s_BFu15s  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_BFu8s_BFu15s) C1{ FL:0 Fs:8 Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_BFu8s_BFu17i  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu8s_BFu17i) C1{ FL:0 Fs:8 Fi:17}



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


struct  BFu0ll_BFu8s_BFu17ll  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu8s_BFu17ll) C1{ FL:0 Fs:8 FL:17}



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


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



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


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



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


struct  BFu0ll_BFu8s_BFu1ll  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu8s_BFu1ll) C1{ FL:0 Fs:8 FL:1}



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


struct  BFu0ll_BFu8s_BFu1s  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_BFu8s_BFu1s) C1{ FL:0 Fs:8 Fs:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu0ll_BFu8s_BFu7i  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_BFu8s_BFu7i) C1{ FL:0 Fs:8 Fi:7}



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


struct  BFu0ll_BFu8s_BFu7ll  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu8s_BFu7ll) C1{ FL:0 Fs:8 FL:7}



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


struct  BFu0ll_BFu8s_BFu7s  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_BFu8s_BFu7s) C1{ FL:0 Fs:8 Fs:7}



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


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



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


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



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


struct  BFu0ll_BFu8s_BFu8ll  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu8s_BFu8ll) C1{ FL:0 Fs:8 FL:8}



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


struct  BFu0ll_BFu8s_BFu8s  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_BFu8s_BFu8s) C1{ FL:0 Fs:8 Fs:8}



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


struct  BFu0ll_BFu8s_BFu9i  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu8s_BFu9i) C1{ FL:0 Fs:8 Fi:9}



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


struct  BFu0ll_BFu8s_BFu9ll  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu8s_BFu9ll) C1{ FL:0 Fs:8 FL:9}



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


struct  BFu0ll_BFu8s_BFu9s  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu8s_BFu9s) C1{ FL:0 Fs:8 Fs:9}



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


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



static void Test_BFu0ll_BFu8s_C()
{
  {
    init_simple_test("BFu0ll_BFu8s_C");
    static STRUCT_IF_C BFu0ll_BFu8s_C lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu8s_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0ll_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0ll_BFu8s_C");
    check_field_offset(lv, v2, 1, "BFu0ll_BFu8s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu8s_C, BFu0ll_BFu8s_C)
//============================================================================


struct  BFu0ll_BFu8s_D  {
  __tsu64  :0;
  unsigned short v1:8;
  double v2;
};
//SIG(1 BFu0ll_BFu8s_D) C1{ FL:0 Fs:8 FL}



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


struct  BFu0ll_BFu8s_F  {
  __tsu64  :0;
  unsigned short v1:8;
  float v2;
};
//SIG(1 BFu0ll_BFu8s_F) C1{ FL:0 Fs:8 Fi}



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


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



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


struct  BFu0ll_BFu8s_Ip  {
  __tsu64  :0;
  unsigned short v1:8;
  int *v2;
};
//SIG(1 BFu0ll_BFu8s_Ip) C1{ FL:0 Fs:8 Fp}



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


struct  BFu0ll_BFu8s_L  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu8s_L) C1{ FL:0 Fs:8 FL}



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


struct  BFu0ll_BFu8s_S  {
  __tsu64  :0;
  unsigned short v1:8;
  short v2;
};
//SIG(1 BFu0ll_BFu8s_S) C1{ FL:0 Fs:8 Fs}



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


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



static void Test_BFu0ll_BFu8s_Uc()
{
  {
    init_simple_test("BFu0ll_BFu8s_Uc");
    static STRUCT_IF_C BFu0ll_BFu8s_Uc lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu8s_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0ll_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0ll_BFu8s_Uc");
    check_field_offset(lv, v2, 1, "BFu0ll_BFu8s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu8s_Uc, BFu0ll_BFu8s_Uc)
//============================================================================


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



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


struct  BFu0ll_BFu8s_Ul  {
  __tsu64  :0;
  unsigned short v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu8s_Ul) C1{ FL:0 Fs:8 FL}



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


struct  BFu0ll_BFu8s_Us  {
  __tsu64  :0;
  unsigned short v1:8;
  unsigned short v2;
};
//SIG(1 BFu0ll_BFu8s_Us) C1{ FL:0 Fs:8 Fs}



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


struct  BFu0ll_BFu8s_Vp  {
  __tsu64  :0;
  unsigned short v1:8;
  void *v2;
};
//SIG(1 BFu0ll_BFu8s_Vp) C1{ FL:0 Fs:8 Fp}



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


struct  BFu0ll_BFu9i  {
  __tsu64  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0ll_BFu9i) C1{ FL:0 Fi:9}



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


struct  BFu0ll_BFu9i_BFu0c  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu9i_BFu0c) C1{ FL:0 Fi:9 Fc:0}



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


struct  BFu0ll_BFu9i_BFu0i  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu9i_BFu0i) C1{ FL:0 Fi:9 Fi:0}



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


struct  BFu0ll_BFu9i_BFu0ll  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu9i_BFu0ll) C1{ FL:0 Fi:9 FL:0}



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


struct  BFu0ll_BFu9i_BFu0s  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu9i_BFu0s) C1{ FL:0 Fi:9 Fs:0}



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


struct  BFu0ll_BFu9i_BFu15i  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_BFu9i_BFu15i) C1{ FL:0 Fi:9 Fi:15}



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


struct  BFu0ll_BFu9i_BFu15ll  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_BFu9i_BFu15ll) C1{ FL:0 Fi:9 FL:15}



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


struct  BFu0ll_BFu9i_BFu15s  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_BFu9i_BFu15s) C1{ FL:0 Fi:9 Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_BFu9i_BFu17i  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu9i_BFu17i) C1{ FL:0 Fi:9 Fi:17}



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


struct  BFu0ll_BFu9i_BFu17ll  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu9i_BFu17ll) C1{ FL:0 Fi:9 FL:17}



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


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



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


struct  BFu0ll_BFu9i_BFu1i  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_BFu9i_BFu1i) C1{ FL:0 Fi:9 Fi:1}



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


struct  BFu0ll_BFu9i_BFu1ll  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu9i_BFu1ll) C1{ FL:0 Fi:9 FL:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu0ll_BFu9i_BFu7i  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_BFu9i_BFu7i) C1{ FL:0 Fi:9 Fi:7}



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


struct  BFu0ll_BFu9i_BFu7ll  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu9i_BFu7ll) C1{ FL:0 Fi:9 FL:7}



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


struct  BFu0ll_BFu9i_BFu7s  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_BFu9i_BFu7s) C1{ FL:0 Fi:9 Fs:7}



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


struct  BFu0ll_BFu9i_BFu8c  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_BFu9i_BFu8c) C1{ FL:0 Fi:9 Fc:8}



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


struct  BFu0ll_BFu9i_BFu8i  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_BFu9i_BFu8i) C1{ FL:0 Fi:9 Fi:8}



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


struct  BFu0ll_BFu9i_BFu8ll  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu9i_BFu8ll) C1{ FL:0 Fi:9 FL:8}



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


struct  BFu0ll_BFu9i_BFu8s  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_BFu9i_BFu8s) C1{ FL:0 Fi:9 Fs:8}



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


struct  BFu0ll_BFu9i_BFu9i  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu9i_BFu9i) C1{ FL:0 Fi:9 Fi:9}



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


struct  BFu0ll_BFu9i_BFu9ll  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu9i_BFu9ll) C1{ FL:0 Fi:9 FL:9}



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


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



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


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



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


struct  BFu0ll_BFu9i_D  {
  __tsu64  :0;
  unsigned int v1:9;
  double v2;
};
//SIG(1 BFu0ll_BFu9i_D) C1{ FL:0 Fi:9 FL}



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


struct  BFu0ll_BFu9i_F  {
  __tsu64  :0;
  unsigned int v1:9;
  float v2;
};
//SIG(1 BFu0ll_BFu9i_F) C1{ FL:0 Fi:9 Fi}



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


struct  BFu0ll_BFu9i_I  {
  __tsu64  :0;
  unsigned int v1:9;
  int v2;
};
//SIG(1 BFu0ll_BFu9i_I) C1{ FL:0 Fi:9 Fi}



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


struct  BFu0ll_BFu9i_Ip  {
  __tsu64  :0;
  unsigned int v1:9;
  int *v2;
};
//SIG(1 BFu0ll_BFu9i_Ip) C1{ FL:0 Fi:9 Fp}



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


struct  BFu0ll_BFu9i_L  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu9i_L) C1{ FL:0 Fi:9 FL}



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


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



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


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



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


struct  BFu0ll_BFu9i_Ui  {
  __tsu64  :0;
  unsigned int v1:9;
  unsigned int v2;
};
//SIG(1 BFu0ll_BFu9i_Ui) C1{ FL:0 Fi:9 Fi}



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


struct  BFu0ll_BFu9i_Ul  {
  __tsu64  :0;
  unsigned int v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu9i_Ul) C1{ FL:0 Fi:9 FL}



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


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



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


struct  BFu0ll_BFu9i_Vp  {
  __tsu64  :0;
  unsigned int v1:9;
  void *v2;
};
//SIG(1 BFu0ll_BFu9i_Vp) C1{ FL:0 Fi:9 Fp}



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


struct  BFu0ll_BFu9ll  {
  __tsu64  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0ll_BFu9ll) C1{ FL:0 FL:9}



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


struct  BFu0ll_BFu9ll_BFu0c  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu9ll_BFu0c) C1{ FL:0 FL:9 Fc:0}



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


struct  BFu0ll_BFu9ll_BFu0i  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu9ll_BFu0i) C1{ FL:0 FL:9 Fi:0}



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


struct  BFu0ll_BFu9ll_BFu0ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu9ll_BFu0ll) C1{ FL:0 FL:9 FL:0}



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


struct  BFu0ll_BFu9ll_BFu0s  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu9ll_BFu0s) C1{ FL:0 FL:9 Fs:0}



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


struct  BFu0ll_BFu9ll_BFu15i  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_BFu9ll_BFu15i) C1{ FL:0 FL:9 Fi:15}



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


struct  BFu0ll_BFu9ll_BFu15ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_BFu9ll_BFu15ll) C1{ FL:0 FL:9 FL:15}



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


struct  BFu0ll_BFu9ll_BFu15s  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_BFu9ll_BFu15s) C1{ FL:0 FL:9 Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_BFu9ll_BFu17i  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu9ll_BFu17i) C1{ FL:0 FL:9 Fi:17}



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


struct  BFu0ll_BFu9ll_BFu17ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu9ll_BFu17ll) C1{ FL:0 FL:9 FL:17}



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


struct  BFu0ll_BFu9ll_BFu1c  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_BFu9ll_BFu1c) C1{ FL:0 FL:9 Fc:1}



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


struct  BFu0ll_BFu9ll_BFu1i  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_BFu9ll_BFu1i) C1{ FL:0 FL:9 Fi:1}



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


struct  BFu0ll_BFu9ll_BFu1ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu9ll_BFu1ll) C1{ FL:0 FL:9 FL:1}



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


struct  BFu0ll_BFu9ll_BFu1s  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_BFu9ll_BFu1s) C1{ FL:0 FL:9 Fs:1}



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


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



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


struct  BFu0ll_BFu9ll_BFu31ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_BFu9ll_BFu31ll) C1{ FL:0 FL:9 FL:31}



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


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



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


struct  BFu0ll_BFu9ll_BFu32ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_BFu9ll_BFu32ll) C1{ FL:0 FL:9 FL:32}



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


struct  BFu0ll_BFu9ll_BFu33  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_BFu9ll_BFu33) C1{ FL:0 FL:9 FL:33}



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


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



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


struct  BFu0ll_BFu9ll_BFu7i  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_BFu9ll_BFu7i) C1{ FL:0 FL:9 Fi:7}



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


struct  BFu0ll_BFu9ll_BFu7ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu9ll_BFu7ll) C1{ FL:0 FL:9 FL:7}



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


struct  BFu0ll_BFu9ll_BFu7s  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_BFu9ll_BFu7s) C1{ FL:0 FL:9 Fs:7}



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


struct  BFu0ll_BFu9ll_BFu8c  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_BFu9ll_BFu8c) C1{ FL:0 FL:9 Fc:8}



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


struct  BFu0ll_BFu9ll_BFu8i  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_BFu9ll_BFu8i) C1{ FL:0 FL:9 Fi:8}



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


struct  BFu0ll_BFu9ll_BFu8ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu9ll_BFu8ll) C1{ FL:0 FL:9 FL:8}



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


struct  BFu0ll_BFu9ll_BFu8s  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_BFu9ll_BFu8s) C1{ FL:0 FL:9 Fs:8}



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


struct  BFu0ll_BFu9ll_BFu9i  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_BFu9ll_BFu9i) C1{ FL:0 FL:9 Fi:9}



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


struct  BFu0ll_BFu9ll_BFu9ll  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu9ll_BFu9ll) C1{ FL:0 FL:9 FL:9}



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


struct  BFu0ll_BFu9ll_BFu9s  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu9ll_BFu9s) C1{ FL:0 FL:9 Fs:9}



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


struct  BFu0ll_BFu9ll_C  {
  __tsu64  :0;
  __tsu64 v1:9;
  char v2;
};
//SIG(1 BFu0ll_BFu9ll_C) C1{ FL:0 FL:9 Fc}



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


struct  BFu0ll_BFu9ll_D  {
  __tsu64  :0;
  __tsu64 v1:9;
  double v2;
};
//SIG(1 BFu0ll_BFu9ll_D) C1{ FL:0 FL:9 FL}



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


struct  BFu0ll_BFu9ll_F  {
  __tsu64  :0;
  __tsu64 v1:9;
  float v2;
};
//SIG(1 BFu0ll_BFu9ll_F) C1{ FL:0 FL:9 Fi}



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


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



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


struct  BFu0ll_BFu9ll_Ip  {
  __tsu64  :0;
  __tsu64 v1:9;
  int *v2;
};
//SIG(1 BFu0ll_BFu9ll_Ip) C1{ FL:0 FL:9 Fp}



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


struct  BFu0ll_BFu9ll_L  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu9ll_L) C1{ FL:0 FL:9 FL}



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


struct  BFu0ll_BFu9ll_S  {
  __tsu64  :0;
  __tsu64 v1:9;
  short v2;
};
//SIG(1 BFu0ll_BFu9ll_S) C1{ FL:0 FL:9 Fs}



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


struct  BFu0ll_BFu9ll_Uc  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned char v2;
};
//SIG(1 BFu0ll_BFu9ll_Uc) C1{ FL:0 FL:9 Fc}



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


struct  BFu0ll_BFu9ll_Ui  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned int v2;
};
//SIG(1 BFu0ll_BFu9ll_Ui) C1{ FL:0 FL:9 Fi}



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


struct  BFu0ll_BFu9ll_Ul  {
  __tsu64  :0;
  __tsu64 v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu9ll_Ul) C1{ FL:0 FL:9 FL}



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


struct  BFu0ll_BFu9ll_Us  {
  __tsu64  :0;
  __tsu64 v1:9;
  unsigned short v2;
};
//SIG(1 BFu0ll_BFu9ll_Us) C1{ FL:0 FL:9 Fs}



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


struct  BFu0ll_BFu9ll_Vp  {
  __tsu64  :0;
  __tsu64 v1:9;
  void *v2;
};
//SIG(1 BFu0ll_BFu9ll_Vp) C1{ FL:0 FL:9 Fp}



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


struct  BFu0ll_BFu9s  {
  __tsu64  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0ll_BFu9s) C1{ FL:0 Fs:9}



static void Test_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu0ll_BFu9s");
    static STRUCT_IF_C BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu9s, BFu0ll_BFu9s)
//============================================================================


struct  BFu0ll_BFu9s_BFu0c  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0ll_BFu9s_BFu0c) C1{ FL:0 Fs:9 Fc:0}



static void Test_BFu0ll_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu0ll_BFu9s_BFu0c");
    static STRUCT_IF_C BFu0ll_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0ll_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu9s_BFu0c, BFu0ll_BFu9s_BFu0c)
//============================================================================


struct  BFu0ll_BFu9s_BFu0i  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0ll_BFu9s_BFu0i) C1{ FL:0 Fs:9 Fi:0}



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


struct  BFu0ll_BFu9s_BFu0ll  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0ll_BFu9s_BFu0ll) C1{ FL:0 Fs:9 FL:0}



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


struct  BFu0ll_BFu9s_BFu0s  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0ll_BFu9s_BFu0s) C1{ FL:0 Fs:9 Fs:0}



static void Test_BFu0ll_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu0ll_BFu9s_BFu0s");
    static STRUCT_IF_C BFu0ll_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0ll_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_BFu9s_BFu0s, BFu0ll_BFu9s_BFu0s)
//============================================================================


struct  BFu0ll_BFu9s_BFu15i  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_BFu9s_BFu15i) C1{ FL:0 Fs:9 Fi:15}



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


struct  BFu0ll_BFu9s_BFu15ll  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_BFu9s_BFu15ll) C1{ FL:0 Fs:9 FL:15}



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


struct  BFu0ll_BFu9s_BFu15s  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_BFu9s_BFu15s) C1{ FL:0 Fs:9 Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_BFu9s_BFu17i  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_BFu9s_BFu17i) C1{ FL:0 Fs:9 Fi:17}



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


struct  BFu0ll_BFu9s_BFu17ll  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_BFu9s_BFu17ll) C1{ FL:0 Fs:9 FL:17}



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


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



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


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



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


struct  BFu0ll_BFu9s_BFu1ll  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_BFu9s_BFu1ll) C1{ FL:0 Fs:9 FL:1}



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


struct  BFu0ll_BFu9s_BFu1s  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_BFu9s_BFu1s) C1{ FL:0 Fs:9 Fs:1}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu0ll_BFu9s_BFu7i  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_BFu9s_BFu7i) C1{ FL:0 Fs:9 Fi:7}



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


struct  BFu0ll_BFu9s_BFu7ll  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_BFu9s_BFu7ll) C1{ FL:0 Fs:9 FL:7}



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


struct  BFu0ll_BFu9s_BFu7s  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_BFu9s_BFu7s) C1{ FL:0 Fs:9 Fs:7}



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


struct  BFu0ll_BFu9s_BFu8c  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_BFu9s_BFu8c) C1{ FL:0 Fs:9 Fc:8}



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


struct  BFu0ll_BFu9s_BFu8i  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_BFu9s_BFu8i) C1{ FL:0 Fs:9 Fi:8}



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


struct  BFu0ll_BFu9s_BFu8ll  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_BFu9s_BFu8ll) C1{ FL:0 Fs:9 FL:8}



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


struct  BFu0ll_BFu9s_BFu8s  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_BFu9s_BFu8s) C1{ FL:0 Fs:9 Fs:8}



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


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



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


struct  BFu0ll_BFu9s_BFu9ll  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_BFu9s_BFu9ll) C1{ FL:0 Fs:9 FL:9}



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


struct  BFu0ll_BFu9s_BFu9s  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_BFu9s_BFu9s) C1{ FL:0 Fs:9 Fs:9}



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


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



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


struct  BFu0ll_BFu9s_D  {
  __tsu64  :0;
  unsigned short v1:9;
  double v2;
};
//SIG(1 BFu0ll_BFu9s_D) C1{ FL:0 Fs:9 FL}



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


struct  BFu0ll_BFu9s_F  {
  __tsu64  :0;
  unsigned short v1:9;
  float v2;
};
//SIG(1 BFu0ll_BFu9s_F) C1{ FL:0 Fs:9 Fi}



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


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



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


struct  BFu0ll_BFu9s_Ip  {
  __tsu64  :0;
  unsigned short v1:9;
  int *v2;
};
//SIG(1 BFu0ll_BFu9s_Ip) C1{ FL:0 Fs:9 Fp}



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


struct  BFu0ll_BFu9s_L  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0ll_BFu9s_L) C1{ FL:0 Fs:9 FL}



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


struct  BFu0ll_BFu9s_S  {
  __tsu64  :0;
  unsigned short v1:9;
  short v2;
};
//SIG(1 BFu0ll_BFu9s_S) C1{ FL:0 Fs:9 Fs}



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


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



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


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



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


struct  BFu0ll_BFu9s_Ul  {
  __tsu64  :0;
  unsigned short v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0ll_BFu9s_Ul) C1{ FL:0 Fs:9 FL}



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


struct  BFu0ll_BFu9s_Us  {
  __tsu64  :0;
  unsigned short v1:9;
  unsigned short v2;
};
//SIG(1 BFu0ll_BFu9s_Us) C1{ FL:0 Fs:9 Fs}



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


struct  BFu0ll_BFu9s_Vp  {
  __tsu64  :0;
  unsigned short v1:9;
  void *v2;
};
//SIG(1 BFu0ll_BFu9s_Vp) C1{ FL:0 Fs:9 Fp}



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


struct  BFu0ll_C  {
  __tsu64  :0;
  char v1;
};
//SIG(1 BFu0ll_C) C1{ FL:0 Fc}



static void Test_BFu0ll_C()
{
  {
    init_simple_test("BFu0ll_C");
    static STRUCT_IF_C BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_C.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C, BFu0ll_C)
//============================================================================


struct  BFu0ll_C_BFu0c  {
  __tsu64  :0;
  char v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_C_BFu0c) C1{ FL:0 Fc Fc:0}



static void Test_BFu0ll_C_BFu0c()
{
  {
    init_simple_test("BFu0ll_C_BFu0c");
    static STRUCT_IF_C BFu0ll_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0ll_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu0c, BFu0ll_C_BFu0c)
//============================================================================


struct  BFu0ll_C_BFu0i  {
  __tsu64  :0;
  char v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_C_BFu0i) C1{ FL:0 Fc Fi:0}



static void Test_BFu0ll_C_BFu0i()
{
  {
    init_simple_test("BFu0ll_C_BFu0i");
    static STRUCT_IF_C BFu0ll_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu0i, BFu0ll_C_BFu0i)
//============================================================================


struct  BFu0ll_C_BFu0ll  {
  __tsu64  :0;
  char v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_C_BFu0ll) C1{ FL:0 Fc FL:0}



static void Test_BFu0ll_C_BFu0ll()
{
  {
    init_simple_test("BFu0ll_C_BFu0ll");
    static STRUCT_IF_C BFu0ll_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu0ll, BFu0ll_C_BFu0ll)
//============================================================================


struct  BFu0ll_C_BFu0s  {
  __tsu64  :0;
  char v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_C_BFu0s) C1{ FL:0 Fc Fs:0}



static void Test_BFu0ll_C_BFu0s()
{
  {
    init_simple_test("BFu0ll_C_BFu0s");
    static STRUCT_IF_C BFu0ll_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu0s, BFu0ll_C_BFu0s)
//============================================================================


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



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


struct  BFu0ll_C_BFu15ll  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_C_BFu15ll) C1{ FL:0 Fc FL:15}



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


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



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


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



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


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



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


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



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


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



static void Test_BFu0ll_C_BFu17i()
{
  {
    init_simple_test("BFu0ll_C_BFu17i");
    static STRUCT_IF_C BFu0ll_C_BFu17i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_C_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_C_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0ll_C_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0ll_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu17i, BFu0ll_C_BFu17i)
//============================================================================


struct  BFu0ll_C_BFu17ll  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_C_BFu17ll) C1{ FL:0 Fc FL:17}



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


struct  BFu0ll_C_BFu1c  {
  __tsu64  :0;
  char v1;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_C_BFu1c) C1{ FL:0 Fc Fc:1}



static void Test_BFu0ll_C_BFu1c()
{
  {
    init_simple_test("BFu0ll_C_BFu1c");
    static STRUCT_IF_C BFu0ll_C_BFu1c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0ll_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu1c, BFu0ll_C_BFu1c)
//============================================================================


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



static void Test_BFu0ll_C_BFu1i()
{
  {
    init_simple_test("BFu0ll_C_BFu1i");
    static STRUCT_IF_C BFu0ll_C_BFu1i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_C_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_C_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0ll_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu1i, BFu0ll_C_BFu1i)
//============================================================================


struct  BFu0ll_C_BFu1ll  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_C_BFu1ll) C1{ FL:0 Fc FL:1}



static void Test_BFu0ll_C_BFu1ll()
{
  {
    init_simple_test("BFu0ll_C_BFu1ll");
    static STRUCT_IF_C BFu0ll_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_C_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0ll_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu1ll, BFu0ll_C_BFu1ll)
//============================================================================


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



static void Test_BFu0ll_C_BFu1s()
{
  {
    init_simple_test("BFu0ll_C_BFu1s");
    static STRUCT_IF_C BFu0ll_C_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_C_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0ll_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu1s, BFu0ll_C_BFu1s)
//============================================================================


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



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


struct  BFu0ll_C_BFu31ll  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_C_BFu31ll) C1{ FL:0 Fc FL:31}



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


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



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


struct  BFu0ll_C_BFu32ll  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_C_BFu32ll) C1{ FL:0 Fc FL:32}



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


struct  BFu0ll_C_BFu33  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_C_BFu33) C1{ FL:0 Fc FL:33}



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


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



static void Test_BFu0ll_C_BFu7c()
{
  {
    init_simple_test("BFu0ll_C_BFu7c");
    static STRUCT_IF_C BFu0ll_C_BFu7c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0ll_C_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0ll_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu7c, BFu0ll_C_BFu7c)
//============================================================================


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



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


struct  BFu0ll_C_BFu7ll  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_C_BFu7ll) C1{ FL:0 Fc FL:7}



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


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



static void Test_BFu0ll_C_BFu7s()
{
  {
    init_simple_test("BFu0ll_C_BFu7s");
    static STRUCT_IF_C BFu0ll_C_BFu7s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_C_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0ll_C_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0ll_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu7s, BFu0ll_C_BFu7s)
//============================================================================


struct  BFu0ll_C_BFu8c  {
  __tsu64  :0;
  char v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_C_BFu8c) C1{ FL:0 Fc Fc:8}



static void Test_BFu0ll_C_BFu8c()
{
  {
    init_simple_test("BFu0ll_C_BFu8c");
    static STRUCT_IF_C BFu0ll_C_BFu8c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0ll_C_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0ll_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu8c, BFu0ll_C_BFu8c)
//============================================================================


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



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


struct  BFu0ll_C_BFu8ll  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_C_BFu8ll) C1{ FL:0 Fc FL:8}



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


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



static void Test_BFu0ll_C_BFu8s()
{
  {
    init_simple_test("BFu0ll_C_BFu8s");
    static STRUCT_IF_C BFu0ll_C_BFu8s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_C_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0ll_C_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0ll_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_BFu8s, BFu0ll_C_BFu8s)
//============================================================================


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



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


struct  BFu0ll_C_BFu9ll  {
  __tsu64  :0;
  char v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_C_BFu9ll) C1{ FL:0 Fc FL:9}



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


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



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


struct  BFu0ll_C_C  {
  __tsu64  :0;
  char v1;
  char v2;
};
//SIG(1 BFu0ll_C_C) C1{ FL:0 Fc[2]}



static void Test_BFu0ll_C_C()
{
  {
    init_simple_test("BFu0ll_C_C");
    static STRUCT_IF_C BFu0ll_C_C lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_C.v1");
    check_field_offset(lv, v2, 1, "BFu0ll_C_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_C, BFu0ll_C_C)
//============================================================================


struct  BFu0ll_C_D  {
  __tsu64  :0;
  char v1;
  double v2;
};
//SIG(1 BFu0ll_C_D) C1{ FL:0 Fc FL}



static void Test_BFu0ll_C_D()
{
  {
    init_simple_test("BFu0ll_C_D");
    static STRUCT_IF_C BFu0ll_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_C_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_C_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_D, BFu0ll_C_D)
//============================================================================


struct  BFu0ll_C_F  {
  __tsu64  :0;
  char v1;
  float v2;
};
//SIG(1 BFu0ll_C_F) C1{ FL:0 Fc Fi}



static void Test_BFu0ll_C_F()
{
  {
    init_simple_test("BFu0ll_C_F");
    static STRUCT_IF_C BFu0ll_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_C_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_C_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_F.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_C_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_F, BFu0ll_C_F)
//============================================================================


struct  BFu0ll_C_I  {
  __tsu64  :0;
  char v1;
  int v2;
};
//SIG(1 BFu0ll_C_I) C1{ FL:0 Fc Fi}



static void Test_BFu0ll_C_I()
{
  {
    init_simple_test("BFu0ll_C_I");
    static STRUCT_IF_C BFu0ll_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_C_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_C_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_I.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_C_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_I, BFu0ll_C_I)
//============================================================================


struct  BFu0ll_C_Ip  {
  __tsu64  :0;
  char v1;
  int *v2;
};
//SIG(1 BFu0ll_C_Ip) C1{ FL:0 Fc Fp}



static void Test_BFu0ll_C_Ip()
{
  {
    init_simple_test("BFu0ll_C_Ip");
    static STRUCT_IF_C BFu0ll_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_C_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_C_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_Ip, BFu0ll_C_Ip)
//============================================================================


struct  BFu0ll_C_L  {
  __tsu64  :0;
  char v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_C_L) C1{ FL:0 Fc FL}



static void Test_BFu0ll_C_L()
{
  {
    init_simple_test("BFu0ll_C_L");
    static STRUCT_IF_C BFu0ll_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_C_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_C_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_L, BFu0ll_C_L)
//============================================================================


struct  BFu0ll_C_S  {
  __tsu64  :0;
  char v1;
  short v2;
};
//SIG(1 BFu0ll_C_S) C1{ FL:0 Fc Fs}



static void Test_BFu0ll_C_S()
{
  {
    init_simple_test("BFu0ll_C_S");
    static STRUCT_IF_C BFu0ll_C_S lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_C_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_C_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_S.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_C_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_S, BFu0ll_C_S)
//============================================================================


struct  BFu0ll_C_Uc  {
  __tsu64  :0;
  char v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_C_Uc) C1{ FL:0 Fc[2]}



static void Test_BFu0ll_C_Uc()
{
  {
    init_simple_test("BFu0ll_C_Uc");
    static STRUCT_IF_C BFu0ll_C_Uc lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_C_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_C_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_Uc.v1");
    check_field_offset(lv, v2, 1, "BFu0ll_C_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_Uc, BFu0ll_C_Uc)
//============================================================================


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



static void Test_BFu0ll_C_Ui()
{
  {
    init_simple_test("BFu0ll_C_Ui");
    static STRUCT_IF_C BFu0ll_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_C_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_C_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_C_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_Ui, BFu0ll_C_Ui)
//============================================================================


struct  BFu0ll_C_Ul  {
  __tsu64  :0;
  char v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_C_Ul) C1{ FL:0 Fc FL}



static void Test_BFu0ll_C_Ul()
{
  {
    init_simple_test("BFu0ll_C_Ul");
    static STRUCT_IF_C BFu0ll_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_C_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_C_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_Ul, BFu0ll_C_Ul)
//============================================================================


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



static void Test_BFu0ll_C_Us()
{
  {
    init_simple_test("BFu0ll_C_Us");
    static STRUCT_IF_C BFu0ll_C_Us lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_C_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_C_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_Us.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_C_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_Us, BFu0ll_C_Us)
//============================================================================


struct  BFu0ll_C_Vp  {
  __tsu64  :0;
  char v1;
  void *v2;
};
//SIG(1 BFu0ll_C_Vp) C1{ FL:0 Fc Fp}



static void Test_BFu0ll_C_Vp()
{
  {
    init_simple_test("BFu0ll_C_Vp");
    static STRUCT_IF_C BFu0ll_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_C_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_C_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_C_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_C_Vp, BFu0ll_C_Vp)
//============================================================================


struct  BFu0ll_D  {
  __tsu64  :0;
  double v1;
};
//SIG(1 BFu0ll_D) C1{ FL:0 FL}



static void Test_BFu0ll_D()
{
  {
    init_simple_test("BFu0ll_D");
    static STRUCT_IF_C BFu0ll_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_D.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D, BFu0ll_D)
//============================================================================


struct  BFu0ll_D_BFu0c  {
  __tsu64  :0;
  double v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_D_BFu0c) C1{ FL:0 FL Fc:0}



static void Test_BFu0ll_D_BFu0c()
{
  {
    init_simple_test("BFu0ll_D_BFu0c");
    static STRUCT_IF_C BFu0ll_D_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_BFu0c, BFu0ll_D_BFu0c)
//============================================================================


struct  BFu0ll_D_BFu0i  {
  __tsu64  :0;
  double v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_D_BFu0i) C1{ FL:0 FL Fi:0}



static void Test_BFu0ll_D_BFu0i()
{
  {
    init_simple_test("BFu0ll_D_BFu0i");
    static STRUCT_IF_C BFu0ll_D_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_BFu0i, BFu0ll_D_BFu0i)
//============================================================================


struct  BFu0ll_D_BFu0ll  {
  __tsu64  :0;
  double v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_D_BFu0ll) C1{ FL:0 FL FL:0}



static void Test_BFu0ll_D_BFu0ll()
{
  {
    init_simple_test("BFu0ll_D_BFu0ll");
    static STRUCT_IF_C BFu0ll_D_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_BFu0ll, BFu0ll_D_BFu0ll)
//============================================================================


struct  BFu0ll_D_BFu0s  {
  __tsu64  :0;
  double v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_D_BFu0s) C1{ FL:0 FL Fs:0}



static void Test_BFu0ll_D_BFu0s()
{
  {
    init_simple_test("BFu0ll_D_BFu0s");
    static STRUCT_IF_C BFu0ll_D_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_BFu0s, BFu0ll_D_BFu0s)
//============================================================================


struct  BFu0ll_D_BFu15i  {
  __tsu64  :0;
  double v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_D_BFu15i) C1{ FL:0 FL Fi:15}



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


struct  BFu0ll_D_BFu15ll  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_D_BFu15ll) C1{ FL:0 FL FL:15}



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


struct  BFu0ll_D_BFu15s  {
  __tsu64  :0;
  double v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_D_BFu15s) C1{ FL:0 FL Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_D_BFu17i  {
  __tsu64  :0;
  double v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_D_BFu17i) C1{ FL:0 FL Fi:17}



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


struct  BFu0ll_D_BFu17ll  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_D_BFu17ll) C1{ FL:0 FL FL:17}



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


struct  BFu0ll_D_BFu1c  {
  __tsu64  :0;
  double v1;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_D_BFu1c) C1{ FL:0 FL Fc:1}



static void Test_BFu0ll_D_BFu1c()
{
  {
    init_simple_test("BFu0ll_D_BFu1c");
    static STRUCT_IF_C BFu0ll_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_BFu1c, BFu0ll_D_BFu1c)
//============================================================================


struct  BFu0ll_D_BFu1i  {
  __tsu64  :0;
  double v1;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_D_BFu1i) C1{ FL:0 FL Fi:1}



static void Test_BFu0ll_D_BFu1i()
{
  {
    init_simple_test("BFu0ll_D_BFu1i");
    static STRUCT_IF_C BFu0ll_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_BFu1i, BFu0ll_D_BFu1i)
//============================================================================


struct  BFu0ll_D_BFu1ll  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_D_BFu1ll) C1{ FL:0 FL FL:1}



static void Test_BFu0ll_D_BFu1ll()
{
  {
    init_simple_test("BFu0ll_D_BFu1ll");
    static STRUCT_IF_C BFu0ll_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_BFu1ll, BFu0ll_D_BFu1ll)
//============================================================================


struct  BFu0ll_D_BFu1s  {
  __tsu64  :0;
  double v1;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_D_BFu1s) C1{ FL:0 FL Fs:1}



static void Test_BFu0ll_D_BFu1s()
{
  {
    init_simple_test("BFu0ll_D_BFu1s");
    static STRUCT_IF_C BFu0ll_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_BFu1s, BFu0ll_D_BFu1s)
//============================================================================


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



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


struct  BFu0ll_D_BFu31ll  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_D_BFu31ll) C1{ FL:0 FL FL:31}



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


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



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


struct  BFu0ll_D_BFu32ll  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_D_BFu32ll) C1{ FL:0 FL FL:32}



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


struct  BFu0ll_D_BFu33  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_D_BFu33) C1{ FL:0 FL FL:33}



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


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



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


struct  BFu0ll_D_BFu7i  {
  __tsu64  :0;
  double v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_D_BFu7i) C1{ FL:0 FL Fi:7}



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


struct  BFu0ll_D_BFu7ll  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_D_BFu7ll) C1{ FL:0 FL FL:7}



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


struct  BFu0ll_D_BFu7s  {
  __tsu64  :0;
  double v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_D_BFu7s) C1{ FL:0 FL Fs:7}



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


struct  BFu0ll_D_BFu8c  {
  __tsu64  :0;
  double v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_D_BFu8c) C1{ FL:0 FL Fc:8}



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


struct  BFu0ll_D_BFu8i  {
  __tsu64  :0;
  double v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_D_BFu8i) C1{ FL:0 FL Fi:8}



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


struct  BFu0ll_D_BFu8ll  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_D_BFu8ll) C1{ FL:0 FL FL:8}



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


struct  BFu0ll_D_BFu8s  {
  __tsu64  :0;
  double v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_D_BFu8s) C1{ FL:0 FL Fs:8}



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


struct  BFu0ll_D_BFu9i  {
  __tsu64  :0;
  double v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_D_BFu9i) C1{ FL:0 FL Fi:9}



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


struct  BFu0ll_D_BFu9ll  {
  __tsu64  :0;
  double v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_D_BFu9ll) C1{ FL:0 FL FL:9}



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


struct  BFu0ll_D_BFu9s  {
  __tsu64  :0;
  double v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_D_BFu9s) C1{ FL:0 FL Fs:9}



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


struct  BFu0ll_D_C  {
  __tsu64  :0;
  double v1;
  char v2;
};
//SIG(1 BFu0ll_D_C) C1{ FL:0 FL Fc}



static void Test_BFu0ll_D_C()
{
  {
    init_simple_test("BFu0ll_D_C");
    static STRUCT_IF_C BFu0ll_D_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_C.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_C, BFu0ll_D_C)
//============================================================================


struct  BFu0ll_D_D  {
  __tsu64  :0;
  double v1;
  double v2;
};
//SIG(1 BFu0ll_D_D) C1{ FL:0 FL[2]}



static void Test_BFu0ll_D_D()
{
  {
    init_simple_test("BFu0ll_D_D");
    static STRUCT_IF_C BFu0ll_D_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_D.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_D, BFu0ll_D_D)
//============================================================================


struct  BFu0ll_D_F  {
  __tsu64  :0;
  double v1;
  float v2;
};
//SIG(1 BFu0ll_D_F) C1{ FL:0 FL Fi}



static void Test_BFu0ll_D_F()
{
  {
    init_simple_test("BFu0ll_D_F");
    static STRUCT_IF_C BFu0ll_D_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_F.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_F, BFu0ll_D_F)
//============================================================================


struct  BFu0ll_D_I  {
  __tsu64  :0;
  double v1;
  int v2;
};
//SIG(1 BFu0ll_D_I) C1{ FL:0 FL Fi}



static void Test_BFu0ll_D_I()
{
  {
    init_simple_test("BFu0ll_D_I");
    static STRUCT_IF_C BFu0ll_D_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_I.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_I, BFu0ll_D_I)
//============================================================================


struct  BFu0ll_D_Ip  {
  __tsu64  :0;
  double v1;
  int *v2;
};
//SIG(1 BFu0ll_D_Ip) C1{ FL:0 FL Fp}



static void Test_BFu0ll_D_Ip()
{
  {
    init_simple_test("BFu0ll_D_Ip");
    static STRUCT_IF_C BFu0ll_D_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_Ip.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_Ip, BFu0ll_D_Ip)
//============================================================================


struct  BFu0ll_D_L  {
  __tsu64  :0;
  double v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_D_L) C1{ FL:0 FL[2]}



static void Test_BFu0ll_D_L()
{
  {
    init_simple_test("BFu0ll_D_L");
    static STRUCT_IF_C BFu0ll_D_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_L.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_L, BFu0ll_D_L)
//============================================================================


struct  BFu0ll_D_S  {
  __tsu64  :0;
  double v1;
  short v2;
};
//SIG(1 BFu0ll_D_S) C1{ FL:0 FL Fs}



static void Test_BFu0ll_D_S()
{
  {
    init_simple_test("BFu0ll_D_S");
    static STRUCT_IF_C BFu0ll_D_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_S.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_S, BFu0ll_D_S)
//============================================================================


struct  BFu0ll_D_Uc  {
  __tsu64  :0;
  double v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_D_Uc) C1{ FL:0 FL Fc}



static void Test_BFu0ll_D_Uc()
{
  {
    init_simple_test("BFu0ll_D_Uc");
    static STRUCT_IF_C BFu0ll_D_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_Uc.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_Uc, BFu0ll_D_Uc)
//============================================================================


struct  BFu0ll_D_Ui  {
  __tsu64  :0;
  double v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_D_Ui) C1{ FL:0 FL Fi}



static void Test_BFu0ll_D_Ui()
{
  {
    init_simple_test("BFu0ll_D_Ui");
    static STRUCT_IF_C BFu0ll_D_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_Ui.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_Ui, BFu0ll_D_Ui)
//============================================================================


struct  BFu0ll_D_Ul  {
  __tsu64  :0;
  double v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_D_Ul) C1{ FL:0 FL[2]}



static void Test_BFu0ll_D_Ul()
{
  {
    init_simple_test("BFu0ll_D_Ul");
    static STRUCT_IF_C BFu0ll_D_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_Ul.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_Ul, BFu0ll_D_Ul)
//============================================================================


struct  BFu0ll_D_Us  {
  __tsu64  :0;
  double v1;
  unsigned short v2;
};
//SIG(1 BFu0ll_D_Us) C1{ FL:0 FL Fs}



static void Test_BFu0ll_D_Us()
{
  {
    init_simple_test("BFu0ll_D_Us");
    static STRUCT_IF_C BFu0ll_D_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_Us.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_Us, BFu0ll_D_Us)
//============================================================================


struct  BFu0ll_D_Vp  {
  __tsu64  :0;
  double v1;
  void *v2;
};
//SIG(1 BFu0ll_D_Vp) C1{ FL:0 FL Fp}



static void Test_BFu0ll_D_Vp()
{
  {
    init_simple_test("BFu0ll_D_Vp");
    static STRUCT_IF_C BFu0ll_D_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_D_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_D_Vp.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_D_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_D_Vp, BFu0ll_D_Vp)
//============================================================================


struct  BFu0ll_F  {
  __tsu64  :0;
  float v1;
};
//SIG(1 BFu0ll_F) C1{ FL:0 Fi}



static void Test_BFu0ll_F()
{
  {
    init_simple_test("BFu0ll_F");
    static STRUCT_IF_C BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_F.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F, BFu0ll_F)
//============================================================================


struct  BFu0ll_F_BFu0c  {
  __tsu64  :0;
  float v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_F_BFu0c) C1{ FL:0 Fi Fc:0}



static void Test_BFu0ll_F_BFu0c()
{
  {
    init_simple_test("BFu0ll_F_BFu0c");
    static STRUCT_IF_C BFu0ll_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_BFu0c, BFu0ll_F_BFu0c)
//============================================================================


struct  BFu0ll_F_BFu0i  {
  __tsu64  :0;
  float v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_F_BFu0i) C1{ FL:0 Fi Fi:0}



static void Test_BFu0ll_F_BFu0i()
{
  {
    init_simple_test("BFu0ll_F_BFu0i");
    static STRUCT_IF_C BFu0ll_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_BFu0i, BFu0ll_F_BFu0i)
//============================================================================


struct  BFu0ll_F_BFu0ll  {
  __tsu64  :0;
  float v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_F_BFu0ll) C1{ FL:0 Fi FL:0}



static void Test_BFu0ll_F_BFu0ll()
{
  {
    init_simple_test("BFu0ll_F_BFu0ll");
    static STRUCT_IF_C BFu0ll_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_BFu0ll, BFu0ll_F_BFu0ll)
//============================================================================


struct  BFu0ll_F_BFu0s  {
  __tsu64  :0;
  float v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_F_BFu0s) C1{ FL:0 Fi Fs:0}



static void Test_BFu0ll_F_BFu0s()
{
  {
    init_simple_test("BFu0ll_F_BFu0s");
    static STRUCT_IF_C BFu0ll_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_BFu0s, BFu0ll_F_BFu0s)
//============================================================================


struct  BFu0ll_F_BFu15i  {
  __tsu64  :0;
  float v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_F_BFu15i) C1{ FL:0 Fi Fi:15}



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


struct  BFu0ll_F_BFu15ll  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_F_BFu15ll) C1{ FL:0 Fi FL:15}



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


struct  BFu0ll_F_BFu15s  {
  __tsu64  :0;
  float v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_F_BFu15s) C1{ FL:0 Fi Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_F_BFu17i  {
  __tsu64  :0;
  float v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_F_BFu17i) C1{ FL:0 Fi Fi:17}



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


struct  BFu0ll_F_BFu17ll  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_F_BFu17ll) C1{ FL:0 Fi FL:17}



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


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



static void Test_BFu0ll_F_BFu1c()
{
  {
    init_simple_test("BFu0ll_F_BFu1c");
    static STRUCT_IF_C BFu0ll_F_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_BFu1c, BFu0ll_F_BFu1c)
//============================================================================


struct  BFu0ll_F_BFu1i  {
  __tsu64  :0;
  float v1;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_F_BFu1i) C1{ FL:0 Fi Fi:1}



static void Test_BFu0ll_F_BFu1i()
{
  {
    init_simple_test("BFu0ll_F_BFu1i");
    static STRUCT_IF_C BFu0ll_F_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_BFu1i, BFu0ll_F_BFu1i)
//============================================================================


struct  BFu0ll_F_BFu1ll  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_F_BFu1ll) C1{ FL:0 Fi FL:1}



static void Test_BFu0ll_F_BFu1ll()
{
  {
    init_simple_test("BFu0ll_F_BFu1ll");
    static STRUCT_IF_C BFu0ll_F_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_F_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_BFu1ll, BFu0ll_F_BFu1ll)
//============================================================================


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



static void Test_BFu0ll_F_BFu1s()
{
  {
    init_simple_test("BFu0ll_F_BFu1s");
    static STRUCT_IF_C BFu0ll_F_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_BFu1s, BFu0ll_F_BFu1s)
//============================================================================


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



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


struct  BFu0ll_F_BFu31ll  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_F_BFu31ll) C1{ FL:0 Fi FL:31}



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


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



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


struct  BFu0ll_F_BFu32ll  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_F_BFu32ll) C1{ FL:0 Fi FL:32}



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


struct  BFu0ll_F_BFu33  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_F_BFu33) C1{ FL:0 Fi FL:33}



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


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



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


struct  BFu0ll_F_BFu7i  {
  __tsu64  :0;
  float v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_F_BFu7i) C1{ FL:0 Fi Fi:7}



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


struct  BFu0ll_F_BFu7ll  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_F_BFu7ll) C1{ FL:0 Fi FL:7}



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


struct  BFu0ll_F_BFu7s  {
  __tsu64  :0;
  float v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_F_BFu7s) C1{ FL:0 Fi Fs:7}



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


struct  BFu0ll_F_BFu8c  {
  __tsu64  :0;
  float v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_F_BFu8c) C1{ FL:0 Fi Fc:8}



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


struct  BFu0ll_F_BFu8i  {
  __tsu64  :0;
  float v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_F_BFu8i) C1{ FL:0 Fi Fi:8}



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


struct  BFu0ll_F_BFu8ll  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_F_BFu8ll) C1{ FL:0 Fi FL:8}



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


struct  BFu0ll_F_BFu8s  {
  __tsu64  :0;
  float v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_F_BFu8s) C1{ FL:0 Fi Fs:8}



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


struct  BFu0ll_F_BFu9i  {
  __tsu64  :0;
  float v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_F_BFu9i) C1{ FL:0 Fi Fi:9}



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


struct  BFu0ll_F_BFu9ll  {
  __tsu64  :0;
  float v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_F_BFu9ll) C1{ FL:0 Fi FL:9}



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


struct  BFu0ll_F_BFu9s  {
  __tsu64  :0;
  float v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_F_BFu9s) C1{ FL:0 Fi Fs:9}



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


struct  BFu0ll_F_C  {
  __tsu64  :0;
  float v1;
  char v2;
};
//SIG(1 BFu0ll_F_C) C1{ FL:0 Fi Fc}



static void Test_BFu0ll_F_C()
{
  {
    init_simple_test("BFu0ll_F_C");
    static STRUCT_IF_C BFu0ll_F_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_C.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_F_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_C, BFu0ll_F_C)
//============================================================================


struct  BFu0ll_F_D  {
  __tsu64  :0;
  float v1;
  double v2;
};
//SIG(1 BFu0ll_F_D) C1{ FL:0 Fi FL}



static void Test_BFu0ll_F_D()
{
  {
    init_simple_test("BFu0ll_F_D");
    static STRUCT_IF_C BFu0ll_F_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_F_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_F_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_D, BFu0ll_F_D)
//============================================================================


struct  BFu0ll_F_F  {
  __tsu64  :0;
  float v1;
  float v2;
};
//SIG(1 BFu0ll_F_F) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_F_F()
{
  {
    init_simple_test("BFu0ll_F_F");
    static STRUCT_IF_C BFu0ll_F_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_F.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_F_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_F, BFu0ll_F_F)
//============================================================================


struct  BFu0ll_F_I  {
  __tsu64  :0;
  float v1;
  int v2;
};
//SIG(1 BFu0ll_F_I) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_F_I()
{
  {
    init_simple_test("BFu0ll_F_I");
    static STRUCT_IF_C BFu0ll_F_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_I.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_F_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_I, BFu0ll_F_I)
//============================================================================


struct  BFu0ll_F_Ip  {
  __tsu64  :0;
  float v1;
  int *v2;
};
//SIG(1 BFu0ll_F_Ip) C1{ FL:0 Fi Fp}



static void Test_BFu0ll_F_Ip()
{
  {
    init_simple_test("BFu0ll_F_Ip");
    static STRUCT_IF_C BFu0ll_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_F_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_F_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_Ip, BFu0ll_F_Ip)
//============================================================================


struct  BFu0ll_F_L  {
  __tsu64  :0;
  float v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_F_L) C1{ FL:0 Fi FL}



static void Test_BFu0ll_F_L()
{
  {
    init_simple_test("BFu0ll_F_L");
    static STRUCT_IF_C BFu0ll_F_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_F_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_F_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_L, BFu0ll_F_L)
//============================================================================


struct  BFu0ll_F_S  {
  __tsu64  :0;
  float v1;
  short v2;
};
//SIG(1 BFu0ll_F_S) C1{ FL:0 Fi Fs}



static void Test_BFu0ll_F_S()
{
  {
    init_simple_test("BFu0ll_F_S");
    static STRUCT_IF_C BFu0ll_F_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_S.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_F_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_S, BFu0ll_F_S)
//============================================================================


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



static void Test_BFu0ll_F_Uc()
{
  {
    init_simple_test("BFu0ll_F_Uc");
    static STRUCT_IF_C BFu0ll_F_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_Uc.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_F_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_Uc, BFu0ll_F_Uc)
//============================================================================


struct  BFu0ll_F_Ui  {
  __tsu64  :0;
  float v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_F_Ui) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_F_Ui()
{
  {
    init_simple_test("BFu0ll_F_Ui");
    static STRUCT_IF_C BFu0ll_F_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_F_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_Ui, BFu0ll_F_Ui)
//============================================================================


struct  BFu0ll_F_Ul  {
  __tsu64  :0;
  float v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_F_Ul) C1{ FL:0 Fi FL}



static void Test_BFu0ll_F_Ul()
{
  {
    init_simple_test("BFu0ll_F_Ul");
    static STRUCT_IF_C BFu0ll_F_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_F_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_F_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_Ul, BFu0ll_F_Ul)
//============================================================================


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



static void Test_BFu0ll_F_Us()
{
  {
    init_simple_test("BFu0ll_F_Us");
    static STRUCT_IF_C BFu0ll_F_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_F_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_F_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_Us.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_F_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_Us, BFu0ll_F_Us)
//============================================================================


struct  BFu0ll_F_Vp  {
  __tsu64  :0;
  float v1;
  void *v2;
};
//SIG(1 BFu0ll_F_Vp) C1{ FL:0 Fi Fp}



static void Test_BFu0ll_F_Vp()
{
  {
    init_simple_test("BFu0ll_F_Vp");
    static STRUCT_IF_C BFu0ll_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_F_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_F_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_F_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_F_Vp, BFu0ll_F_Vp)
//============================================================================


struct  BFu0ll_I  {
  __tsu64  :0;
  int v1;
};
//SIG(1 BFu0ll_I) C1{ FL:0 Fi}



static void Test_BFu0ll_I()
{
  {
    init_simple_test("BFu0ll_I");
    static STRUCT_IF_C BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_I.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I, BFu0ll_I)
//============================================================================


struct  BFu0ll_I_BFu0c  {
  __tsu64  :0;
  int v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_I_BFu0c) C1{ FL:0 Fi Fc:0}



static void Test_BFu0ll_I_BFu0c()
{
  {
    init_simple_test("BFu0ll_I_BFu0c");
    static STRUCT_IF_C BFu0ll_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_BFu0c, BFu0ll_I_BFu0c)
//============================================================================


struct  BFu0ll_I_BFu0i  {
  __tsu64  :0;
  int v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_I_BFu0i) C1{ FL:0 Fi Fi:0}



static void Test_BFu0ll_I_BFu0i()
{
  {
    init_simple_test("BFu0ll_I_BFu0i");
    static STRUCT_IF_C BFu0ll_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_BFu0i, BFu0ll_I_BFu0i)
//============================================================================


struct  BFu0ll_I_BFu0ll  {
  __tsu64  :0;
  int v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_I_BFu0ll) C1{ FL:0 Fi FL:0}



static void Test_BFu0ll_I_BFu0ll()
{
  {
    init_simple_test("BFu0ll_I_BFu0ll");
    static STRUCT_IF_C BFu0ll_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_BFu0ll, BFu0ll_I_BFu0ll)
//============================================================================


struct  BFu0ll_I_BFu0s  {
  __tsu64  :0;
  int v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_I_BFu0s) C1{ FL:0 Fi Fs:0}



static void Test_BFu0ll_I_BFu0s()
{
  {
    init_simple_test("BFu0ll_I_BFu0s");
    static STRUCT_IF_C BFu0ll_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_BFu0s, BFu0ll_I_BFu0s)
//============================================================================


struct  BFu0ll_I_BFu15i  {
  __tsu64  :0;
  int v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_I_BFu15i) C1{ FL:0 Fi Fi:15}



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


struct  BFu0ll_I_BFu15ll  {
  __tsu64  :0;
  int v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_I_BFu15ll) C1{ FL:0 Fi FL:15}



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


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



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


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



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


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



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


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



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


struct  BFu0ll_I_BFu17i  {
  __tsu64  :0;
  int v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_I_BFu17i) C1{ FL:0 Fi Fi:17}



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


struct  BFu0ll_I_BFu17ll  {
  __tsu64  :0;
  int v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_I_BFu17ll) C1{ FL:0 Fi FL:17}



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


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



static void Test_BFu0ll_I_BFu1c()
{
  {
    init_simple_test("BFu0ll_I_BFu1c");
    static STRUCT_IF_C BFu0ll_I_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_BFu1c, BFu0ll_I_BFu1c)
//============================================================================


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



static void Test_BFu0ll_I_BFu1i()
{
  {
    init_simple_test("BFu0ll_I_BFu1i");
    static STRUCT_IF_C BFu0ll_I_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_BFu1i, BFu0ll_I_BFu1i)
//============================================================================


struct  BFu0ll_I_BFu1ll  {
  __tsu64  :0;
  int v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_I_BFu1ll) C1{ FL:0 Fi FL:1}



static void Test_BFu0ll_I_BFu1ll()
{
  {
    init_simple_test("BFu0ll_I_BFu1ll");
    static STRUCT_IF_C BFu0ll_I_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_I_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_BFu1ll, BFu0ll_I_BFu1ll)
//============================================================================


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



static void Test_BFu0ll_I_BFu1s()
{
  {
    init_simple_test("BFu0ll_I_BFu1s");
    static STRUCT_IF_C BFu0ll_I_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_BFu1s, BFu0ll_I_BFu1s)
//============================================================================


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



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


struct  BFu0ll_I_BFu31ll  {
  __tsu64  :0;
  int v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_I_BFu31ll) C1{ FL:0 Fi FL:31}



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


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



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


struct  BFu0ll_I_BFu32ll  {
  __tsu64  :0;
  int v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_I_BFu32ll) C1{ FL:0 Fi FL:32}



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


struct  BFu0ll_I_BFu33  {
  __tsu64  :0;
  int v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_I_BFu33) C1{ FL:0 Fi FL:33}



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


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



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


struct  BFu0ll_I_BFu7i  {
  __tsu64  :0;
  int v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_I_BFu7i) C1{ FL:0 Fi Fi:7}



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


struct  BFu0ll_I_BFu7ll  {
  __tsu64  :0;
  int v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_I_BFu7ll) C1{ FL:0 Fi FL:7}



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


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



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


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



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


struct  BFu0ll_I_BFu8i  {
  __tsu64  :0;
  int v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_I_BFu8i) C1{ FL:0 Fi Fi:8}



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


struct  BFu0ll_I_BFu8ll  {
  __tsu64  :0;
  int v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_I_BFu8ll) C1{ FL:0 Fi FL:8}



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


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



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


struct  BFu0ll_I_BFu9i  {
  __tsu64  :0;
  int v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_I_BFu9i) C1{ FL:0 Fi Fi:9}



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


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



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


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



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


struct  BFu0ll_I_C  {
  __tsu64  :0;
  int v1;
  char v2;
};
//SIG(1 BFu0ll_I_C) C1{ FL:0 Fi Fc}



static void Test_BFu0ll_I_C()
{
  {
    init_simple_test("BFu0ll_I_C");
    static STRUCT_IF_C BFu0ll_I_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_C.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_I_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_C, BFu0ll_I_C)
//============================================================================


struct  BFu0ll_I_D  {
  __tsu64  :0;
  int v1;
  double v2;
};
//SIG(1 BFu0ll_I_D) C1{ FL:0 Fi FL}



static void Test_BFu0ll_I_D()
{
  {
    init_simple_test("BFu0ll_I_D");
    static STRUCT_IF_C BFu0ll_I_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_I_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_I_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_D, BFu0ll_I_D)
//============================================================================


struct  BFu0ll_I_F  {
  __tsu64  :0;
  int v1;
  float v2;
};
//SIG(1 BFu0ll_I_F) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_I_F()
{
  {
    init_simple_test("BFu0ll_I_F");
    static STRUCT_IF_C BFu0ll_I_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_F.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_I_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_F, BFu0ll_I_F)
//============================================================================


struct  BFu0ll_I_I  {
  __tsu64  :0;
  int v1;
  int v2;
};
//SIG(1 BFu0ll_I_I) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_I_I()
{
  {
    init_simple_test("BFu0ll_I_I");
    static STRUCT_IF_C BFu0ll_I_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_I.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_I_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_I, BFu0ll_I_I)
//============================================================================


struct  BFu0ll_I_Ip  {
  __tsu64  :0;
  int v1;
  int *v2;
};
//SIG(1 BFu0ll_I_Ip) C1{ FL:0 Fi Fp}



static void Test_BFu0ll_I_Ip()
{
  {
    init_simple_test("BFu0ll_I_Ip");
    static STRUCT_IF_C BFu0ll_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_I_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_I_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_Ip, BFu0ll_I_Ip)
//============================================================================


struct  BFu0ll_I_L  {
  __tsu64  :0;
  int v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_I_L) C1{ FL:0 Fi FL}



static void Test_BFu0ll_I_L()
{
  {
    init_simple_test("BFu0ll_I_L");
    static STRUCT_IF_C BFu0ll_I_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_I_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_I_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_L, BFu0ll_I_L)
//============================================================================


struct  BFu0ll_I_S  {
  __tsu64  :0;
  int v1;
  short v2;
};
//SIG(1 BFu0ll_I_S) C1{ FL:0 Fi Fs}



static void Test_BFu0ll_I_S()
{
  {
    init_simple_test("BFu0ll_I_S");
    static STRUCT_IF_C BFu0ll_I_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_S.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_I_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_S, BFu0ll_I_S)
//============================================================================


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



static void Test_BFu0ll_I_Uc()
{
  {
    init_simple_test("BFu0ll_I_Uc");
    static STRUCT_IF_C BFu0ll_I_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_Uc.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_I_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_Uc, BFu0ll_I_Uc)
//============================================================================


struct  BFu0ll_I_Ui  {
  __tsu64  :0;
  int v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_I_Ui) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_I_Ui()
{
  {
    init_simple_test("BFu0ll_I_Ui");
    static STRUCT_IF_C BFu0ll_I_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_I_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_Ui, BFu0ll_I_Ui)
//============================================================================


struct  BFu0ll_I_Ul  {
  __tsu64  :0;
  int v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_I_Ul) C1{ FL:0 Fi FL}



static void Test_BFu0ll_I_Ul()
{
  {
    init_simple_test("BFu0ll_I_Ul");
    static STRUCT_IF_C BFu0ll_I_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_I_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_I_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_Ul, BFu0ll_I_Ul)
//============================================================================


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



static void Test_BFu0ll_I_Us()
{
  {
    init_simple_test("BFu0ll_I_Us");
    static STRUCT_IF_C BFu0ll_I_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_I_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_I_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_Us.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_I_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_Us, BFu0ll_I_Us)
//============================================================================


struct  BFu0ll_I_Vp  {
  __tsu64  :0;
  int v1;
  void *v2;
};
//SIG(1 BFu0ll_I_Vp) C1{ FL:0 Fi Fp}



static void Test_BFu0ll_I_Vp()
{
  {
    init_simple_test("BFu0ll_I_Vp");
    static STRUCT_IF_C BFu0ll_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_I_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_I_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_I_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_I_Vp, BFu0ll_I_Vp)
//============================================================================


struct  BFu0ll_Ip  {
  __tsu64  :0;
  int *v1;
};
//SIG(1 BFu0ll_Ip) C1{ FL:0 Fp}



static void Test_BFu0ll_Ip()
{
  {
    init_simple_test("BFu0ll_Ip");
    static STRUCT_IF_C BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip, BFu0ll_Ip)
//============================================================================


struct  BFu0ll_Ip_BFu0c  {
  __tsu64  :0;
  int *v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_Ip_BFu0c) C1{ FL:0 Fp Fc:0}



static void Test_BFu0ll_Ip_BFu0c()
{
  {
    init_simple_test("BFu0ll_Ip_BFu0c");
    static STRUCT_IF_C BFu0ll_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_BFu0c, BFu0ll_Ip_BFu0c)
//============================================================================


struct  BFu0ll_Ip_BFu0i  {
  __tsu64  :0;
  int *v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_Ip_BFu0i) C1{ FL:0 Fp Fi:0}



static void Test_BFu0ll_Ip_BFu0i()
{
  {
    init_simple_test("BFu0ll_Ip_BFu0i");
    static STRUCT_IF_C BFu0ll_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_BFu0i, BFu0ll_Ip_BFu0i)
//============================================================================


struct  BFu0ll_Ip_BFu0ll  {
  __tsu64  :0;
  int *v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_Ip_BFu0ll) C1{ FL:0 Fp FL:0}



static void Test_BFu0ll_Ip_BFu0ll()
{
  {
    init_simple_test("BFu0ll_Ip_BFu0ll");
    static STRUCT_IF_C BFu0ll_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_BFu0ll, BFu0ll_Ip_BFu0ll)
//============================================================================


struct  BFu0ll_Ip_BFu0s  {
  __tsu64  :0;
  int *v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_Ip_BFu0s) C1{ FL:0 Fp Fs:0}



static void Test_BFu0ll_Ip_BFu0s()
{
  {
    init_simple_test("BFu0ll_Ip_BFu0s");
    static STRUCT_IF_C BFu0ll_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_BFu0s, BFu0ll_Ip_BFu0s)
//============================================================================


struct  BFu0ll_Ip_BFu15i  {
  __tsu64  :0;
  int *v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_Ip_BFu15i) C1{ FL:0 Fp Fi:15}



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


struct  BFu0ll_Ip_BFu15ll  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_Ip_BFu15ll) C1{ FL:0 Fp FL:15}



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


struct  BFu0ll_Ip_BFu15s  {
  __tsu64  :0;
  int *v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_Ip_BFu15s) C1{ FL:0 Fp Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_Ip_BFu17i  {
  __tsu64  :0;
  int *v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_Ip_BFu17i) C1{ FL:0 Fp Fi:17}



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


struct  BFu0ll_Ip_BFu17ll  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_Ip_BFu17ll) C1{ FL:0 Fp FL:17}



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


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



static void Test_BFu0ll_Ip_BFu1c()
{
  {
    init_simple_test("BFu0ll_Ip_BFu1c");
    static STRUCT_IF_C BFu0ll_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0ll_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_BFu1c, BFu0ll_Ip_BFu1c)
//============================================================================


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



static void Test_BFu0ll_Ip_BFu1i()
{
  {
    init_simple_test("BFu0ll_Ip_BFu1i");
    static STRUCT_IF_C BFu0ll_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0ll_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_BFu1i, BFu0ll_Ip_BFu1i)
//============================================================================


struct  BFu0ll_Ip_BFu1ll  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_Ip_BFu1ll) C1{ FL:0 Fp FL:1}



static void Test_BFu0ll_Ip_BFu1ll()
{
  {
    init_simple_test("BFu0ll_Ip_BFu1ll");
    static STRUCT_IF_C BFu0ll_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0ll_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_BFu1ll, BFu0ll_Ip_BFu1ll)
//============================================================================


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



static void Test_BFu0ll_Ip_BFu1s()
{
  {
    init_simple_test("BFu0ll_Ip_BFu1s");
    static STRUCT_IF_C BFu0ll_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0ll_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_BFu1s, BFu0ll_Ip_BFu1s)
//============================================================================


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



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


struct  BFu0ll_Ip_BFu31ll  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_Ip_BFu31ll) C1{ FL:0 Fp FL:31}



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


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



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


struct  BFu0ll_Ip_BFu32ll  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_Ip_BFu32ll) C1{ FL:0 Fp FL:32}



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


struct  BFu0ll_Ip_BFu33  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_Ip_BFu33) C1{ FL:0 Fp FL:33}



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


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



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


struct  BFu0ll_Ip_BFu7i  {
  __tsu64  :0;
  int *v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_Ip_BFu7i) C1{ FL:0 Fp Fi:7}



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


struct  BFu0ll_Ip_BFu7ll  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_Ip_BFu7ll) C1{ FL:0 Fp FL:7}



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


struct  BFu0ll_Ip_BFu7s  {
  __tsu64  :0;
  int *v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_Ip_BFu7s) C1{ FL:0 Fp Fs:7}



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


struct  BFu0ll_Ip_BFu8c  {
  __tsu64  :0;
  int *v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_Ip_BFu8c) C1{ FL:0 Fp Fc:8}



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


struct  BFu0ll_Ip_BFu8i  {
  __tsu64  :0;
  int *v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_Ip_BFu8i) C1{ FL:0 Fp Fi:8}



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


struct  BFu0ll_Ip_BFu8ll  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_Ip_BFu8ll) C1{ FL:0 Fp FL:8}



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


struct  BFu0ll_Ip_BFu8s  {
  __tsu64  :0;
  int *v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_Ip_BFu8s) C1{ FL:0 Fp Fs:8}



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


struct  BFu0ll_Ip_BFu9i  {
  __tsu64  :0;
  int *v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_Ip_BFu9i) C1{ FL:0 Fp Fi:9}



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


struct  BFu0ll_Ip_BFu9ll  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_Ip_BFu9ll) C1{ FL:0 Fp FL:9}



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


struct  BFu0ll_Ip_BFu9s  {
  __tsu64  :0;
  int *v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_Ip_BFu9s) C1{ FL:0 Fp Fs:9}



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


struct  BFu0ll_Ip_C  {
  __tsu64  :0;
  int *v1;
  char v2;
};
//SIG(1 BFu0ll_Ip_C) C1{ FL:0 Fp Fc}



static void Test_BFu0ll_Ip_C()
{
  {
    init_simple_test("BFu0ll_Ip_C");
    static STRUCT_IF_C BFu0ll_Ip_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_C, BFu0ll_Ip_C)
//============================================================================


struct  BFu0ll_Ip_D  {
  __tsu64  :0;
  int *v1;
  double v2;
};
//SIG(1 BFu0ll_Ip_D) C1{ FL:0 Fp FL}



static void Test_BFu0ll_Ip_D()
{
  {
    init_simple_test("BFu0ll_Ip_D");
    static STRUCT_IF_C BFu0ll_Ip_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_D, BFu0ll_Ip_D)
//============================================================================


struct  BFu0ll_Ip_F  {
  __tsu64  :0;
  int *v1;
  float v2;
};
//SIG(1 BFu0ll_Ip_F) C1{ FL:0 Fp Fi}



static void Test_BFu0ll_Ip_F()
{
  {
    init_simple_test("BFu0ll_Ip_F");
    static STRUCT_IF_C BFu0ll_Ip_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_F, BFu0ll_Ip_F)
//============================================================================


struct  BFu0ll_Ip_I  {
  __tsu64  :0;
  int *v1;
  int v2;
};
//SIG(1 BFu0ll_Ip_I) C1{ FL:0 Fp Fi}



static void Test_BFu0ll_Ip_I()
{
  {
    init_simple_test("BFu0ll_Ip_I");
    static STRUCT_IF_C BFu0ll_Ip_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_I, BFu0ll_Ip_I)
//============================================================================


struct  BFu0ll_Ip_Ip  {
  __tsu64  :0;
  int *v1;
  int *v2;
};
//SIG(1 BFu0ll_Ip_Ip) C1{ FL:0 Fp[2]}



static void Test_BFu0ll_Ip_Ip()
{
  {
    init_simple_test("BFu0ll_Ip_Ip");
    static STRUCT_IF_C BFu0ll_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_Ip, BFu0ll_Ip_Ip)
//============================================================================


struct  BFu0ll_Ip_L  {
  __tsu64  :0;
  int *v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_Ip_L) C1{ FL:0 Fp FL}



static void Test_BFu0ll_Ip_L()
{
  {
    init_simple_test("BFu0ll_Ip_L");
    static STRUCT_IF_C BFu0ll_Ip_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_L, BFu0ll_Ip_L)
//============================================================================


struct  BFu0ll_Ip_S  {
  __tsu64  :0;
  int *v1;
  short v2;
};
//SIG(1 BFu0ll_Ip_S) C1{ FL:0 Fp Fs}



static void Test_BFu0ll_Ip_S()
{
  {
    init_simple_test("BFu0ll_Ip_S");
    static STRUCT_IF_C BFu0ll_Ip_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_S, BFu0ll_Ip_S)
//============================================================================


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



static void Test_BFu0ll_Ip_Uc()
{
  {
    init_simple_test("BFu0ll_Ip_Uc");
    static STRUCT_IF_C BFu0ll_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_Uc, BFu0ll_Ip_Uc)
//============================================================================


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



static void Test_BFu0ll_Ip_Ui()
{
  {
    init_simple_test("BFu0ll_Ip_Ui");
    static STRUCT_IF_C BFu0ll_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_Ui, BFu0ll_Ip_Ui)
//============================================================================


struct  BFu0ll_Ip_Ul  {
  __tsu64  :0;
  int *v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_Ip_Ul) C1{ FL:0 Fp FL}



static void Test_BFu0ll_Ip_Ul()
{
  {
    init_simple_test("BFu0ll_Ip_Ul");
    static STRUCT_IF_C BFu0ll_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_Ul, BFu0ll_Ip_Ul)
//============================================================================


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



static void Test_BFu0ll_Ip_Us()
{
  {
    init_simple_test("BFu0ll_Ip_Us");
    static STRUCT_IF_C BFu0ll_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_Us, BFu0ll_Ip_Us)
//============================================================================


struct  BFu0ll_Ip_Vp  {
  __tsu64  :0;
  int *v1;
  void *v2;
};
//SIG(1 BFu0ll_Ip_Vp) C1{ FL:0 Fp[2]}



static void Test_BFu0ll_Ip_Vp()
{
  {
    init_simple_test("BFu0ll_Ip_Vp");
    static STRUCT_IF_C BFu0ll_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ip_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ip_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ip_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ip_Vp, BFu0ll_Ip_Vp)
//============================================================================


struct  BFu0ll_L  {
  __tsu64  :0;
  __tsi64 v1;
};
//SIG(1 BFu0ll_L) C1{ FL:0 FL}



static void Test_BFu0ll_L()
{
  {
    init_simple_test("BFu0ll_L");
    static STRUCT_IF_C BFu0ll_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_L.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L, BFu0ll_L)
//============================================================================


struct  BFu0ll_L_BFu0c  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_L_BFu0c) C1{ FL:0 FL Fc:0}



static void Test_BFu0ll_L_BFu0c()
{
  {
    init_simple_test("BFu0ll_L_BFu0c");
    static STRUCT_IF_C BFu0ll_L_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_BFu0c, BFu0ll_L_BFu0c)
//============================================================================


struct  BFu0ll_L_BFu0i  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_L_BFu0i) C1{ FL:0 FL Fi:0}



static void Test_BFu0ll_L_BFu0i()
{
  {
    init_simple_test("BFu0ll_L_BFu0i");
    static STRUCT_IF_C BFu0ll_L_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_BFu0i, BFu0ll_L_BFu0i)
//============================================================================


struct  BFu0ll_L_BFu0ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_L_BFu0ll) C1{ FL:0 FL FL:0}



static void Test_BFu0ll_L_BFu0ll()
{
  {
    init_simple_test("BFu0ll_L_BFu0ll");
    static STRUCT_IF_C BFu0ll_L_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_BFu0ll, BFu0ll_L_BFu0ll)
//============================================================================


struct  BFu0ll_L_BFu0s  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_L_BFu0s) C1{ FL:0 FL Fs:0}



static void Test_BFu0ll_L_BFu0s()
{
  {
    init_simple_test("BFu0ll_L_BFu0s");
    static STRUCT_IF_C BFu0ll_L_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_BFu0s, BFu0ll_L_BFu0s)
//============================================================================


struct  BFu0ll_L_BFu15i  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_L_BFu15i) C1{ FL:0 FL Fi:15}



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


struct  BFu0ll_L_BFu15ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_L_BFu15ll) C1{ FL:0 FL FL:15}



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


struct  BFu0ll_L_BFu15s  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_L_BFu15s) C1{ FL:0 FL Fs:15}



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


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



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


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



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


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



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


struct  BFu0ll_L_BFu17i  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_L_BFu17i) C1{ FL:0 FL Fi:17}



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


struct  BFu0ll_L_BFu17ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_L_BFu17ll) C1{ FL:0 FL FL:17}



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


struct  BFu0ll_L_BFu1c  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_L_BFu1c) C1{ FL:0 FL Fc:1}



static void Test_BFu0ll_L_BFu1c()
{
  {
    init_simple_test("BFu0ll_L_BFu1c");
    static STRUCT_IF_C BFu0ll_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_BFu1c, BFu0ll_L_BFu1c)
//============================================================================


struct  BFu0ll_L_BFu1i  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_L_BFu1i) C1{ FL:0 FL Fi:1}



static void Test_BFu0ll_L_BFu1i()
{
  {
    init_simple_test("BFu0ll_L_BFu1i");
    static STRUCT_IF_C BFu0ll_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_BFu1i, BFu0ll_L_BFu1i)
//============================================================================


struct  BFu0ll_L_BFu1ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_L_BFu1ll) C1{ FL:0 FL FL:1}



static void Test_BFu0ll_L_BFu1ll()
{
  {
    init_simple_test("BFu0ll_L_BFu1ll");
    static STRUCT_IF_C BFu0ll_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_BFu1ll, BFu0ll_L_BFu1ll)
//============================================================================


struct  BFu0ll_L_BFu1s  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_L_BFu1s) C1{ FL:0 FL Fs:1}



static void Test_BFu0ll_L_BFu1s()
{
  {
    init_simple_test("BFu0ll_L_BFu1s");
    static STRUCT_IF_C BFu0ll_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_BFu1s, BFu0ll_L_BFu1s)
//============================================================================


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



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


struct  BFu0ll_L_BFu31ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_L_BFu31ll) C1{ FL:0 FL FL:31}



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


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



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


struct  BFu0ll_L_BFu32ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_L_BFu32ll) C1{ FL:0 FL FL:32}



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


struct  BFu0ll_L_BFu33  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_L_BFu33) C1{ FL:0 FL FL:33}



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


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



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


struct  BFu0ll_L_BFu7i  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_L_BFu7i) C1{ FL:0 FL Fi:7}



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


struct  BFu0ll_L_BFu7ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_L_BFu7ll) C1{ FL:0 FL FL:7}



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


struct  BFu0ll_L_BFu7s  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_L_BFu7s) C1{ FL:0 FL Fs:7}



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


struct  BFu0ll_L_BFu8c  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_L_BFu8c) C1{ FL:0 FL Fc:8}



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


struct  BFu0ll_L_BFu8i  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_L_BFu8i) C1{ FL:0 FL Fi:8}



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


struct  BFu0ll_L_BFu8ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_L_BFu8ll) C1{ FL:0 FL FL:8}



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


struct  BFu0ll_L_BFu8s  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_L_BFu8s) C1{ FL:0 FL Fs:8}



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


struct  BFu0ll_L_BFu9i  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_L_BFu9i) C1{ FL:0 FL Fi:9}



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


struct  BFu0ll_L_BFu9ll  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_L_BFu9ll) C1{ FL:0 FL FL:9}



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


struct  BFu0ll_L_BFu9s  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_L_BFu9s) C1{ FL:0 FL Fs:9}



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


struct  BFu0ll_L_C  {
  __tsu64  :0;
  __tsi64 v1;
  char v2;
};
//SIG(1 BFu0ll_L_C) C1{ FL:0 FL Fc}



static void Test_BFu0ll_L_C()
{
  {
    init_simple_test("BFu0ll_L_C");
    static STRUCT_IF_C BFu0ll_L_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_C.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_C, BFu0ll_L_C)
//============================================================================


struct  BFu0ll_L_D  {
  __tsu64  :0;
  __tsi64 v1;
  double v2;
};
//SIG(1 BFu0ll_L_D) C1{ FL:0 FL[2]}



static void Test_BFu0ll_L_D()
{
  {
    init_simple_test("BFu0ll_L_D");
    static STRUCT_IF_C BFu0ll_L_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_D.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_D, BFu0ll_L_D)
//============================================================================


struct  BFu0ll_L_F  {
  __tsu64  :0;
  __tsi64 v1;
  float v2;
};
//SIG(1 BFu0ll_L_F) C1{ FL:0 FL Fi}



static void Test_BFu0ll_L_F()
{
  {
    init_simple_test("BFu0ll_L_F");
    static STRUCT_IF_C BFu0ll_L_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_F.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_F, BFu0ll_L_F)
//============================================================================


struct  BFu0ll_L_I  {
  __tsu64  :0;
  __tsi64 v1;
  int v2;
};
//SIG(1 BFu0ll_L_I) C1{ FL:0 FL Fi}



static void Test_BFu0ll_L_I()
{
  {
    init_simple_test("BFu0ll_L_I");
    static STRUCT_IF_C BFu0ll_L_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_I.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_I, BFu0ll_L_I)
//============================================================================


struct  BFu0ll_L_Ip  {
  __tsu64  :0;
  __tsi64 v1;
  int *v2;
};
//SIG(1 BFu0ll_L_Ip) C1{ FL:0 FL Fp}



static void Test_BFu0ll_L_Ip()
{
  {
    init_simple_test("BFu0ll_L_Ip");
    static STRUCT_IF_C BFu0ll_L_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_Ip.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_Ip, BFu0ll_L_Ip)
//============================================================================


struct  BFu0ll_L_L  {
  __tsu64  :0;
  __tsi64 v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_L_L) C1{ FL:0 FL[2]}



static void Test_BFu0ll_L_L()
{
  {
    init_simple_test("BFu0ll_L_L");
    static STRUCT_IF_C BFu0ll_L_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_L.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_L, BFu0ll_L_L)
//============================================================================


struct  BFu0ll_L_S  {
  __tsu64  :0;
  __tsi64 v1;
  short v2;
};
//SIG(1 BFu0ll_L_S) C1{ FL:0 FL Fs}



static void Test_BFu0ll_L_S()
{
  {
    init_simple_test("BFu0ll_L_S");
    static STRUCT_IF_C BFu0ll_L_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_S.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_S, BFu0ll_L_S)
//============================================================================


struct  BFu0ll_L_Uc  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_L_Uc) C1{ FL:0 FL Fc}



static void Test_BFu0ll_L_Uc()
{
  {
    init_simple_test("BFu0ll_L_Uc");
    static STRUCT_IF_C BFu0ll_L_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_Uc.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_Uc, BFu0ll_L_Uc)
//============================================================================


struct  BFu0ll_L_Ui  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_L_Ui) C1{ FL:0 FL Fi}



static void Test_BFu0ll_L_Ui()
{
  {
    init_simple_test("BFu0ll_L_Ui");
    static STRUCT_IF_C BFu0ll_L_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_Ui.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_Ui, BFu0ll_L_Ui)
//============================================================================


struct  BFu0ll_L_Ul  {
  __tsu64  :0;
  __tsi64 v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_L_Ul) C1{ FL:0 FL[2]}



static void Test_BFu0ll_L_Ul()
{
  {
    init_simple_test("BFu0ll_L_Ul");
    static STRUCT_IF_C BFu0ll_L_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_Ul.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_Ul, BFu0ll_L_Ul)
//============================================================================


struct  BFu0ll_L_Us  {
  __tsu64  :0;
  __tsi64 v1;
  unsigned short v2;
};
//SIG(1 BFu0ll_L_Us) C1{ FL:0 FL Fs}



static void Test_BFu0ll_L_Us()
{
  {
    init_simple_test("BFu0ll_L_Us");
    static STRUCT_IF_C BFu0ll_L_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_Us.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_Us, BFu0ll_L_Us)
//============================================================================


struct  BFu0ll_L_Vp  {
  __tsu64  :0;
  __tsi64 v1;
  void *v2;
};
//SIG(1 BFu0ll_L_Vp) C1{ FL:0 FL Fp}



static void Test_BFu0ll_L_Vp()
{
  {
    init_simple_test("BFu0ll_L_Vp");
    static STRUCT_IF_C BFu0ll_L_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_L_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_L_Vp.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_L_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_L_Vp, BFu0ll_L_Vp)
//============================================================================


struct  BFu0ll_S  {
  __tsu64  :0;
  short v1;
};
//SIG(1 BFu0ll_S) C1{ FL:0 Fs}



static void Test_BFu0ll_S()
{
  {
    init_simple_test("BFu0ll_S");
    static STRUCT_IF_C BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_S.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S, BFu0ll_S)
//============================================================================


struct  BFu0ll_S_BFu0c  {
  __tsu64  :0;
  short v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_S_BFu0c) C1{ FL:0 Fs Fc:0}



static void Test_BFu0ll_S_BFu0c()
{
  {
    init_simple_test("BFu0ll_S_BFu0c");
    static STRUCT_IF_C BFu0ll_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu0c, BFu0ll_S_BFu0c)
//============================================================================


struct  BFu0ll_S_BFu0i  {
  __tsu64  :0;
  short v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_S_BFu0i) C1{ FL:0 Fs Fi:0}



static void Test_BFu0ll_S_BFu0i()
{
  {
    init_simple_test("BFu0ll_S_BFu0i");
    static STRUCT_IF_C BFu0ll_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu0i, BFu0ll_S_BFu0i)
//============================================================================


struct  BFu0ll_S_BFu0ll  {
  __tsu64  :0;
  short v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_S_BFu0ll) C1{ FL:0 Fs FL:0}



static void Test_BFu0ll_S_BFu0ll()
{
  {
    init_simple_test("BFu0ll_S_BFu0ll");
    static STRUCT_IF_C BFu0ll_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu0ll, BFu0ll_S_BFu0ll)
//============================================================================


struct  BFu0ll_S_BFu0s  {
  __tsu64  :0;
  short v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_S_BFu0s) C1{ FL:0 Fs Fs:0}



static void Test_BFu0ll_S_BFu0s()
{
  {
    init_simple_test("BFu0ll_S_BFu0s");
    static STRUCT_IF_C BFu0ll_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu0s, BFu0ll_S_BFu0s)
//============================================================================


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



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


struct  BFu0ll_S_BFu15ll  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_S_BFu15ll) C1{ FL:0 Fs FL:15}



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


struct  BFu0ll_S_BFu15s  {
  __tsu64  :0;
  short v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_S_BFu15s) C1{ FL:0 Fs Fs:15}



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


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



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


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



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


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



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


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



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


struct  BFu0ll_S_BFu17ll  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_S_BFu17ll) C1{ FL:0 Fs FL:17}



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


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



static void Test_BFu0ll_S_BFu1c()
{
  {
    init_simple_test("BFu0ll_S_BFu1c");
    static STRUCT_IF_C BFu0ll_S_BFu1c lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0ll_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu1c, BFu0ll_S_BFu1c)
//============================================================================


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



static void Test_BFu0ll_S_BFu1i()
{
  {
    init_simple_test("BFu0ll_S_BFu1i");
    static STRUCT_IF_C BFu0ll_S_BFu1i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_S_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0ll_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu1i, BFu0ll_S_BFu1i)
//============================================================================


struct  BFu0ll_S_BFu1ll  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_S_BFu1ll) C1{ FL:0 Fs FL:1}



static void Test_BFu0ll_S_BFu1ll()
{
  {
    init_simple_test("BFu0ll_S_BFu1ll");
    static STRUCT_IF_C BFu0ll_S_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_S_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0ll_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu1ll, BFu0ll_S_BFu1ll)
//============================================================================


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



static void Test_BFu0ll_S_BFu1s()
{
  {
    init_simple_test("BFu0ll_S_BFu1s");
    static STRUCT_IF_C BFu0ll_S_BFu1s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0ll_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu1s, BFu0ll_S_BFu1s)
//============================================================================


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



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


struct  BFu0ll_S_BFu31ll  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_S_BFu31ll) C1{ FL:0 Fs FL:31}



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


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



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


struct  BFu0ll_S_BFu32ll  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_S_BFu32ll) C1{ FL:0 Fs FL:32}



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


struct  BFu0ll_S_BFu33  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_S_BFu33) C1{ FL:0 Fs FL:33}



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


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



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


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



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


struct  BFu0ll_S_BFu7ll  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_S_BFu7ll) C1{ FL:0 Fs FL:7}



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


struct  BFu0ll_S_BFu7s  {
  __tsu64  :0;
  short v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_S_BFu7s) C1{ FL:0 Fs Fs:7}



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


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



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


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



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


struct  BFu0ll_S_BFu8ll  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_S_BFu8ll) C1{ FL:0 Fs FL:8}



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


struct  BFu0ll_S_BFu8s  {
  __tsu64  :0;
  short v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_S_BFu8s) C1{ FL:0 Fs Fs:8}



static void Test_BFu0ll_S_BFu8s()
{
  {
    init_simple_test("BFu0ll_S_BFu8s");
    static STRUCT_IF_C BFu0ll_S_BFu8s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0ll_S_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0ll_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu8s, BFu0ll_S_BFu8s)
//============================================================================


struct  BFu0ll_S_BFu9i  {
  __tsu64  :0;
  short v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_S_BFu9i) C1{ FL:0 Fs Fi:9}



static void Test_BFu0ll_S_BFu9i()
{
  {
    init_simple_test("BFu0ll_S_BFu9i");
    static STRUCT_IF_C BFu0ll_S_BFu9i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_S_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0ll_S_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0ll_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu9i, BFu0ll_S_BFu9i)
//============================================================================


struct  BFu0ll_S_BFu9ll  {
  __tsu64  :0;
  short v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_S_BFu9ll) C1{ FL:0 Fs FL:9}



static void Test_BFu0ll_S_BFu9ll()
{
  {
    init_simple_test("BFu0ll_S_BFu9ll");
    static STRUCT_IF_C BFu0ll_S_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_S_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0ll_S_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0ll_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu9ll, BFu0ll_S_BFu9ll)
//============================================================================


struct  BFu0ll_S_BFu9s  {
  __tsu64  :0;
  short v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_S_BFu9s) C1{ FL:0 Fs Fs:9}



static void Test_BFu0ll_S_BFu9s()
{
  {
    init_simple_test("BFu0ll_S_BFu9s");
    static STRUCT_IF_C BFu0ll_S_BFu9s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0ll_S_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0ll_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_BFu9s, BFu0ll_S_BFu9s)
//============================================================================


struct  BFu0ll_S_C  {
  __tsu64  :0;
  short v1;
  char v2;
};
//SIG(1 BFu0ll_S_C) C1{ FL:0 Fs Fc}



static void Test_BFu0ll_S_C()
{
  {
    init_simple_test("BFu0ll_S_C");
    static STRUCT_IF_C BFu0ll_S_C lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_C.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_S_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_C, BFu0ll_S_C)
//============================================================================


struct  BFu0ll_S_D  {
  __tsu64  :0;
  short v1;
  double v2;
};
//SIG(1 BFu0ll_S_D) C1{ FL:0 Fs FL}



static void Test_BFu0ll_S_D()
{
  {
    init_simple_test("BFu0ll_S_D");
    static STRUCT_IF_C BFu0ll_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_S_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_S_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_D, BFu0ll_S_D)
//============================================================================


struct  BFu0ll_S_F  {
  __tsu64  :0;
  short v1;
  float v2;
};
//SIG(1 BFu0ll_S_F) C1{ FL:0 Fs Fi}



static void Test_BFu0ll_S_F()
{
  {
    init_simple_test("BFu0ll_S_F");
    static STRUCT_IF_C BFu0ll_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_S_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_S_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_F.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_S_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_F, BFu0ll_S_F)
//============================================================================


struct  BFu0ll_S_I  {
  __tsu64  :0;
  short v1;
  int v2;
};
//SIG(1 BFu0ll_S_I) C1{ FL:0 Fs Fi}



static void Test_BFu0ll_S_I()
{
  {
    init_simple_test("BFu0ll_S_I");
    static STRUCT_IF_C BFu0ll_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_S_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_S_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_I.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_S_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_I, BFu0ll_S_I)
//============================================================================


struct  BFu0ll_S_Ip  {
  __tsu64  :0;
  short v1;
  int *v2;
};
//SIG(1 BFu0ll_S_Ip) C1{ FL:0 Fs Fp}



static void Test_BFu0ll_S_Ip()
{
  {
    init_simple_test("BFu0ll_S_Ip");
    static STRUCT_IF_C BFu0ll_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_S_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_S_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_Ip, BFu0ll_S_Ip)
//============================================================================


struct  BFu0ll_S_L  {
  __tsu64  :0;
  short v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_S_L) C1{ FL:0 Fs FL}



static void Test_BFu0ll_S_L()
{
  {
    init_simple_test("BFu0ll_S_L");
    static STRUCT_IF_C BFu0ll_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_S_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_S_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_L, BFu0ll_S_L)
//============================================================================


struct  BFu0ll_S_S  {
  __tsu64  :0;
  short v1;
  short v2;
};
//SIG(1 BFu0ll_S_S) C1{ FL:0 Fs[2]}



static void Test_BFu0ll_S_S()
{
  {
    init_simple_test("BFu0ll_S_S");
    static STRUCT_IF_C BFu0ll_S_S lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_S.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_S_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_S, BFu0ll_S_S)
//============================================================================


struct  BFu0ll_S_Uc  {
  __tsu64  :0;
  short v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_S_Uc) C1{ FL:0 Fs Fc}



static void Test_BFu0ll_S_Uc()
{
  {
    init_simple_test("BFu0ll_S_Uc");
    static STRUCT_IF_C BFu0ll_S_Uc lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_Uc.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_S_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_Uc, BFu0ll_S_Uc)
//============================================================================


struct  BFu0ll_S_Ui  {
  __tsu64  :0;
  short v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_S_Ui) C1{ FL:0 Fs Fi}



static void Test_BFu0ll_S_Ui()
{
  {
    init_simple_test("BFu0ll_S_Ui");
    static STRUCT_IF_C BFu0ll_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_S_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_S_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_S_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_Ui, BFu0ll_S_Ui)
//============================================================================


struct  BFu0ll_S_Ul  {
  __tsu64  :0;
  short v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_S_Ul) C1{ FL:0 Fs FL}



static void Test_BFu0ll_S_Ul()
{
  {
    init_simple_test("BFu0ll_S_Ul");
    static STRUCT_IF_C BFu0ll_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_S_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_S_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_Ul, BFu0ll_S_Ul)
//============================================================================


struct  BFu0ll_S_Us  {
  __tsu64  :0;
  short v1;
  unsigned short v2;
};
//SIG(1 BFu0ll_S_Us) C1{ FL:0 Fs[2]}



static void Test_BFu0ll_S_Us()
{
  {
    init_simple_test("BFu0ll_S_Us");
    static STRUCT_IF_C BFu0ll_S_Us lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_S_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_S_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_Us.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_S_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_Us, BFu0ll_S_Us)
//============================================================================


struct  BFu0ll_S_Vp  {
  __tsu64  :0;
  short v1;
  void *v2;
};
//SIG(1 BFu0ll_S_Vp) C1{ FL:0 Fs Fp}



static void Test_BFu0ll_S_Vp()
{
  {
    init_simple_test("BFu0ll_S_Vp");
    static STRUCT_IF_C BFu0ll_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_S_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_S_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_S_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_S_Vp, BFu0ll_S_Vp)
//============================================================================


struct  BFu0ll_Uc  {
  __tsu64  :0;
  unsigned char v1;
};
//SIG(1 BFu0ll_Uc) C1{ FL:0 Fc}



static void Test_BFu0ll_Uc()
{
  {
    init_simple_test("BFu0ll_Uc");
    static STRUCT_IF_C BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc, BFu0ll_Uc)
//============================================================================


struct  BFu0ll_Uc_BFu0c  {
  __tsu64  :0;
  unsigned char v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_Uc_BFu0c) C1{ FL:0 Fc Fc:0}



static void Test_BFu0ll_Uc_BFu0c()
{
  {
    init_simple_test("BFu0ll_Uc_BFu0c");
    static STRUCT_IF_C BFu0ll_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0ll_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu0c, BFu0ll_Uc_BFu0c)
//============================================================================


struct  BFu0ll_Uc_BFu0i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_Uc_BFu0i) C1{ FL:0 Fc Fi:0}



static void Test_BFu0ll_Uc_BFu0i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu0i");
    static STRUCT_IF_C BFu0ll_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu0i, BFu0ll_Uc_BFu0i)
//============================================================================


struct  BFu0ll_Uc_BFu0ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_Uc_BFu0ll) C1{ FL:0 Fc FL:0}



static void Test_BFu0ll_Uc_BFu0ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu0ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu0ll, BFu0ll_Uc_BFu0ll)
//============================================================================


struct  BFu0ll_Uc_BFu0s  {
  __tsu64  :0;
  unsigned char v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_Uc_BFu0s) C1{ FL:0 Fc Fs:0}



static void Test_BFu0ll_Uc_BFu0s()
{
  {
    init_simple_test("BFu0ll_Uc_BFu0s");
    static STRUCT_IF_C BFu0ll_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu0s, BFu0ll_Uc_BFu0s)
//============================================================================


struct  BFu0ll_Uc_BFu15i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_Uc_BFu15i) C1{ FL:0 Fc Fi:15}



static void Test_BFu0ll_Uc_BFu15i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu15i");
    static STRUCT_IF_C BFu0ll_Uc_BFu15i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0ll_Uc_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0ll_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu15i, BFu0ll_Uc_BFu15i)
//============================================================================


struct  BFu0ll_Uc_BFu15ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_Uc_BFu15ll) C1{ FL:0 Fc FL:15}



static void Test_BFu0ll_Uc_BFu15ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu15ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0ll_Uc_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0ll_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu15ll, BFu0ll_Uc_BFu15ll)
//============================================================================


struct  BFu0ll_Uc_BFu15s  {
  __tsu64  :0;
  unsigned char v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_Uc_BFu15s) C1{ FL:0 Fc Fs:15}



static void Test_BFu0ll_Uc_BFu15s()
{
  {
    init_simple_test("BFu0ll_Uc_BFu15s");
    static STRUCT_IF_C BFu0ll_Uc_BFu15s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Uc_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0ll_Uc_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0ll_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu15s, BFu0ll_Uc_BFu15s)
//============================================================================


struct  BFu0ll_Uc_BFu16i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:16;
};
//SIG(1 BFu0ll_Uc_BFu16i) C1{ FL:0 Fc Fi:16}



static void Test_BFu0ll_Uc_BFu16i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu16i");
    static STRUCT_IF_C BFu0ll_Uc_BFu16i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0ll_Uc_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0ll_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu16i, BFu0ll_Uc_BFu16i)
//============================================================================


struct  BFu0ll_Uc_BFu16ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0ll_Uc_BFu16ll) C1{ FL:0 Fc FL:16}



static void Test_BFu0ll_Uc_BFu16ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu16ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0ll_Uc_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0ll_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu16ll, BFu0ll_Uc_BFu16ll)
//============================================================================


struct  BFu0ll_Uc_BFu16s  {
  __tsu64  :0;
  unsigned char v1;
  unsigned short v2:16;
};
//SIG(1 BFu0ll_Uc_BFu16s) C1{ FL:0 Fc Fs:16}



static void Test_BFu0ll_Uc_BFu16s()
{
  {
    init_simple_test("BFu0ll_Uc_BFu16s");
    static STRUCT_IF_C BFu0ll_Uc_BFu16s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Uc_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0ll_Uc_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0ll_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu16s, BFu0ll_Uc_BFu16s)
//============================================================================


struct  BFu0ll_Uc_BFu17i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_Uc_BFu17i) C1{ FL:0 Fc Fi:17}



static void Test_BFu0ll_Uc_BFu17i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu17i");
    static STRUCT_IF_C BFu0ll_Uc_BFu17i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0ll_Uc_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0ll_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu17i, BFu0ll_Uc_BFu17i)
//============================================================================


struct  BFu0ll_Uc_BFu17ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_Uc_BFu17ll) C1{ FL:0 Fc FL:17}



static void Test_BFu0ll_Uc_BFu17ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu17ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0ll_Uc_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0ll_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu17ll, BFu0ll_Uc_BFu17ll)
//============================================================================


struct  BFu0ll_Uc_BFu1c  {
  __tsu64  :0;
  unsigned char v1;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_Uc_BFu1c) C1{ FL:0 Fc Fc:1}



static void Test_BFu0ll_Uc_BFu1c()
{
  {
    init_simple_test("BFu0ll_Uc_BFu1c");
    static STRUCT_IF_C BFu0ll_Uc_BFu1c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0ll_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu1c, BFu0ll_Uc_BFu1c)
//============================================================================


struct  BFu0ll_Uc_BFu1i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_Uc_BFu1i) C1{ FL:0 Fc Fi:1}



static void Test_BFu0ll_Uc_BFu1i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu1i");
    static STRUCT_IF_C BFu0ll_Uc_BFu1i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0ll_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu1i, BFu0ll_Uc_BFu1i)
//============================================================================


struct  BFu0ll_Uc_BFu1ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_Uc_BFu1ll) C1{ FL:0 Fc FL:1}



static void Test_BFu0ll_Uc_BFu1ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu1ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0ll_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu1ll, BFu0ll_Uc_BFu1ll)
//============================================================================


struct  BFu0ll_Uc_BFu1s  {
  __tsu64  :0;
  unsigned char v1;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_Uc_BFu1s) C1{ FL:0 Fc Fs:1}



static void Test_BFu0ll_Uc_BFu1s()
{
  {
    init_simple_test("BFu0ll_Uc_BFu1s");
    static STRUCT_IF_C BFu0ll_Uc_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Uc_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0ll_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu1s, BFu0ll_Uc_BFu1s)
//============================================================================


struct  BFu0ll_Uc_BFu31i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:31;
};
//SIG(1 BFu0ll_Uc_BFu31i) C1{ FL:0 Fc Fi:31}



static void Test_BFu0ll_Uc_BFu31i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu31i");
    static STRUCT_IF_C BFu0ll_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Uc_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0ll_Uc_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0ll_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu31i, BFu0ll_Uc_BFu31i)
//============================================================================


struct  BFu0ll_Uc_BFu31ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_Uc_BFu31ll) C1{ FL:0 Fc FL:31}



static void Test_BFu0ll_Uc_BFu31ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu31ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0ll_Uc_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0ll_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu31ll, BFu0ll_Uc_BFu31ll)
//============================================================================


struct  BFu0ll_Uc_BFu32i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:32;
};
//SIG(1 BFu0ll_Uc_BFu32i) C1{ FL:0 Fc Fi:32}



static void Test_BFu0ll_Uc_BFu32i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu32i");
    static STRUCT_IF_C BFu0ll_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Uc_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0ll_Uc_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0ll_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu32i, BFu0ll_Uc_BFu32i)
//============================================================================


struct  BFu0ll_Uc_BFu32ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_Uc_BFu32ll) C1{ FL:0 Fc FL:32}



static void Test_BFu0ll_Uc_BFu32ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu32ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0ll_Uc_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0ll_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu32ll, BFu0ll_Uc_BFu32ll)
//============================================================================


struct  BFu0ll_Uc_BFu33  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_Uc_BFu33) C1{ FL:0 Fc FL:33}



static void Test_BFu0ll_Uc_BFu33()
{
  {
    init_simple_test("BFu0ll_Uc_BFu33");
    static STRUCT_IF_C BFu0ll_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0ll_Uc_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0ll_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu33, BFu0ll_Uc_BFu33)
//============================================================================


struct  BFu0ll_Uc_BFu7c  {
  __tsu64  :0;
  unsigned char v1;
  unsigned char v2:7;
};
//SIG(1 BFu0ll_Uc_BFu7c) C1{ FL:0 Fc Fc:7}



static void Test_BFu0ll_Uc_BFu7c()
{
  {
    init_simple_test("BFu0ll_Uc_BFu7c");
    static STRUCT_IF_C BFu0ll_Uc_BFu7c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0ll_Uc_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0ll_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu7c, BFu0ll_Uc_BFu7c)
//============================================================================


struct  BFu0ll_Uc_BFu7i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_Uc_BFu7i) C1{ FL:0 Fc Fi:7}



static void Test_BFu0ll_Uc_BFu7i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu7i");
    static STRUCT_IF_C BFu0ll_Uc_BFu7i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0ll_Uc_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0ll_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu7i, BFu0ll_Uc_BFu7i)
//============================================================================


struct  BFu0ll_Uc_BFu7ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_Uc_BFu7ll) C1{ FL:0 Fc FL:7}



static void Test_BFu0ll_Uc_BFu7ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu7ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0ll_Uc_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0ll_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu7ll, BFu0ll_Uc_BFu7ll)
//============================================================================


struct  BFu0ll_Uc_BFu7s  {
  __tsu64  :0;
  unsigned char v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_Uc_BFu7s) C1{ FL:0 Fc Fs:7}



static void Test_BFu0ll_Uc_BFu7s()
{
  {
    init_simple_test("BFu0ll_Uc_BFu7s");
    static STRUCT_IF_C BFu0ll_Uc_BFu7s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Uc_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0ll_Uc_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0ll_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu7s, BFu0ll_Uc_BFu7s)
//============================================================================


struct  BFu0ll_Uc_BFu8c  {
  __tsu64  :0;
  unsigned char v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_Uc_BFu8c) C1{ FL:0 Fc Fc:8}



static void Test_BFu0ll_Uc_BFu8c()
{
  {
    init_simple_test("BFu0ll_Uc_BFu8c");
    static STRUCT_IF_C BFu0ll_Uc_BFu8c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0ll_Uc_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0ll_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu8c, BFu0ll_Uc_BFu8c)
//============================================================================


struct  BFu0ll_Uc_BFu8i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_Uc_BFu8i) C1{ FL:0 Fc Fi:8}



static void Test_BFu0ll_Uc_BFu8i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu8i");
    static STRUCT_IF_C BFu0ll_Uc_BFu8i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0ll_Uc_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0ll_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu8i, BFu0ll_Uc_BFu8i)
//============================================================================


struct  BFu0ll_Uc_BFu8ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_Uc_BFu8ll) C1{ FL:0 Fc FL:8}



static void Test_BFu0ll_Uc_BFu8ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu8ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0ll_Uc_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0ll_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu8ll, BFu0ll_Uc_BFu8ll)
//============================================================================


struct  BFu0ll_Uc_BFu8s  {
  __tsu64  :0;
  unsigned char v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_Uc_BFu8s) C1{ FL:0 Fc Fs:8}



static void Test_BFu0ll_Uc_BFu8s()
{
  {
    init_simple_test("BFu0ll_Uc_BFu8s");
    static STRUCT_IF_C BFu0ll_Uc_BFu8s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Uc_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0ll_Uc_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0ll_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu8s, BFu0ll_Uc_BFu8s)
//============================================================================


struct  BFu0ll_Uc_BFu9i  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_Uc_BFu9i) C1{ FL:0 Fc Fi:9}



static void Test_BFu0ll_Uc_BFu9i()
{
  {
    init_simple_test("BFu0ll_Uc_BFu9i");
    static STRUCT_IF_C BFu0ll_Uc_BFu9i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0ll_Uc_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0ll_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu9i, BFu0ll_Uc_BFu9i)
//============================================================================


struct  BFu0ll_Uc_BFu9ll  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_Uc_BFu9ll) C1{ FL:0 Fc FL:9}



static void Test_BFu0ll_Uc_BFu9ll()
{
  {
    init_simple_test("BFu0ll_Uc_BFu9ll");
    static STRUCT_IF_C BFu0ll_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0ll_Uc_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0ll_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu9ll, BFu0ll_Uc_BFu9ll)
//============================================================================


struct  BFu0ll_Uc_BFu9s  {
  __tsu64  :0;
  unsigned char v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_Uc_BFu9s) C1{ FL:0 Fc Fs:9}



static void Test_BFu0ll_Uc_BFu9s()
{
  {
    init_simple_test("BFu0ll_Uc_BFu9s");
    static STRUCT_IF_C BFu0ll_Uc_BFu9s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Uc_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0ll_Uc_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0ll_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_BFu9s, BFu0ll_Uc_BFu9s)
//============================================================================


struct  BFu0ll_Uc_C  {
  __tsu64  :0;
  unsigned char v1;
  char v2;
};
//SIG(1 BFu0ll_Uc_C) C1{ FL:0 Fc[2]}



static void Test_BFu0ll_Uc_C()
{
  {
    init_simple_test("BFu0ll_Uc_C");
    static STRUCT_IF_C BFu0ll_Uc_C lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_C.v1");
    check_field_offset(lv, v2, 1, "BFu0ll_Uc_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_C, BFu0ll_Uc_C)
//============================================================================


struct  BFu0ll_Uc_D  {
  __tsu64  :0;
  unsigned char v1;
  double v2;
};
//SIG(1 BFu0ll_Uc_D) C1{ FL:0 Fc FL}



static void Test_BFu0ll_Uc_D()
{
  {
    init_simple_test("BFu0ll_Uc_D");
    static STRUCT_IF_C BFu0ll_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Uc_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_D, BFu0ll_Uc_D)
//============================================================================


struct  BFu0ll_Uc_F  {
  __tsu64  :0;
  unsigned char v1;
  float v2;
};
//SIG(1 BFu0ll_Uc_F) C1{ FL:0 Fc Fi}



static void Test_BFu0ll_Uc_F()
{
  {
    init_simple_test("BFu0ll_Uc_F");
    static STRUCT_IF_C BFu0ll_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Uc_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_F.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Uc_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_F, BFu0ll_Uc_F)
//============================================================================


struct  BFu0ll_Uc_I  {
  __tsu64  :0;
  unsigned char v1;
  int v2;
};
//SIG(1 BFu0ll_Uc_I) C1{ FL:0 Fc Fi}



static void Test_BFu0ll_Uc_I()
{
  {
    init_simple_test("BFu0ll_Uc_I");
    static STRUCT_IF_C BFu0ll_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Uc_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_I.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Uc_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_I, BFu0ll_Uc_I)
//============================================================================


struct  BFu0ll_Uc_Ip  {
  __tsu64  :0;
  unsigned char v1;
  int *v2;
};
//SIG(1 BFu0ll_Uc_Ip) C1{ FL:0 Fc Fp}



static void Test_BFu0ll_Uc_Ip()
{
  {
    init_simple_test("BFu0ll_Uc_Ip");
    static STRUCT_IF_C BFu0ll_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Uc_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_Ip, BFu0ll_Uc_Ip)
//============================================================================


struct  BFu0ll_Uc_L  {
  __tsu64  :0;
  unsigned char v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_Uc_L) C1{ FL:0 Fc FL}



static void Test_BFu0ll_Uc_L()
{
  {
    init_simple_test("BFu0ll_Uc_L");
    static STRUCT_IF_C BFu0ll_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Uc_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_L, BFu0ll_Uc_L)
//============================================================================


struct  BFu0ll_Uc_S  {
  __tsu64  :0;
  unsigned char v1;
  short v2;
};
//SIG(1 BFu0ll_Uc_S) C1{ FL:0 Fc Fs}



static void Test_BFu0ll_Uc_S()
{
  {
    init_simple_test("BFu0ll_Uc_S");
    static STRUCT_IF_C BFu0ll_Uc_S lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Uc_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_S.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_Uc_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_S, BFu0ll_Uc_S)
//============================================================================


struct  BFu0ll_Uc_Uc  {
  __tsu64  :0;
  unsigned char v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_Uc_Uc) C1{ FL:0 Fc[2]}



static void Test_BFu0ll_Uc_Uc()
{
  {
    init_simple_test("BFu0ll_Uc_Uc");
    static STRUCT_IF_C BFu0ll_Uc_Uc lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Uc_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0ll_Uc_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_Uc.v1");
    check_field_offset(lv, v2, 1, "BFu0ll_Uc_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_Uc, BFu0ll_Uc_Uc)
//============================================================================


struct  BFu0ll_Uc_Ui  {
  __tsu64  :0;
  unsigned char v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_Uc_Ui) C1{ FL:0 Fc Fi}



static void Test_BFu0ll_Uc_Ui()
{
  {
    init_simple_test("BFu0ll_Uc_Ui");
    static STRUCT_IF_C BFu0ll_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Uc_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Uc_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Uc_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_Ui, BFu0ll_Uc_Ui)
//============================================================================


struct  BFu0ll_Uc_Ul  {
  __tsu64  :0;
  unsigned char v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_Uc_Ul) C1{ FL:0 Fc FL}



static void Test_BFu0ll_Uc_Ul()
{
  {
    init_simple_test("BFu0ll_Uc_Ul");
    static STRUCT_IF_C BFu0ll_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Uc_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_Ul, BFu0ll_Uc_Ul)
//============================================================================


struct  BFu0ll_Uc_Us  {
  __tsu64  :0;
  unsigned char v1;
  unsigned short v2;
};
//SIG(1 BFu0ll_Uc_Us) C1{ FL:0 Fc Fs}



static void Test_BFu0ll_Uc_Us()
{
  {
    init_simple_test("BFu0ll_Uc_Us");
    static STRUCT_IF_C BFu0ll_Uc_Us lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Uc_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Uc_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_Us.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_Uc_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_Us, BFu0ll_Uc_Us)
//============================================================================


struct  BFu0ll_Uc_Vp  {
  __tsu64  :0;
  unsigned char v1;
  void *v2;
};
//SIG(1 BFu0ll_Uc_Vp) C1{ FL:0 Fc Fp}



static void Test_BFu0ll_Uc_Vp()
{
  {
    init_simple_test("BFu0ll_Uc_Vp");
    static STRUCT_IF_C BFu0ll_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Uc_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_Uc_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Uc_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Uc_Vp, BFu0ll_Uc_Vp)
//============================================================================


struct  BFu0ll_Ui  {
  __tsu64  :0;
  unsigned int v1;
};
//SIG(1 BFu0ll_Ui) C1{ FL:0 Fi}



static void Test_BFu0ll_Ui()
{
  {
    init_simple_test("BFu0ll_Ui");
    static STRUCT_IF_C BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui, BFu0ll_Ui)
//============================================================================


struct  BFu0ll_Ui_BFu0c  {
  __tsu64  :0;
  unsigned int v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_Ui_BFu0c) C1{ FL:0 Fi Fc:0}



static void Test_BFu0ll_Ui_BFu0c()
{
  {
    init_simple_test("BFu0ll_Ui_BFu0c");
    static STRUCT_IF_C BFu0ll_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu0c, BFu0ll_Ui_BFu0c)
//============================================================================


struct  BFu0ll_Ui_BFu0i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_Ui_BFu0i) C1{ FL:0 Fi Fi:0}



static void Test_BFu0ll_Ui_BFu0i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu0i");
    static STRUCT_IF_C BFu0ll_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu0i, BFu0ll_Ui_BFu0i)
//============================================================================


struct  BFu0ll_Ui_BFu0ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_Ui_BFu0ll) C1{ FL:0 Fi FL:0}



static void Test_BFu0ll_Ui_BFu0ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu0ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu0ll, BFu0ll_Ui_BFu0ll)
//============================================================================


struct  BFu0ll_Ui_BFu0s  {
  __tsu64  :0;
  unsigned int v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_Ui_BFu0s) C1{ FL:0 Fi Fs:0}



static void Test_BFu0ll_Ui_BFu0s()
{
  {
    init_simple_test("BFu0ll_Ui_BFu0s");
    static STRUCT_IF_C BFu0ll_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu0s, BFu0ll_Ui_BFu0s)
//============================================================================


struct  BFu0ll_Ui_BFu15i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_Ui_BFu15i) C1{ FL:0 Fi Fi:15}



static void Test_BFu0ll_Ui_BFu15i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu15i");
    static STRUCT_IF_C BFu0ll_Ui_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0ll_Ui_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0ll_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu15i, BFu0ll_Ui_BFu15i)
//============================================================================


struct  BFu0ll_Ui_BFu15ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_Ui_BFu15ll) C1{ FL:0 Fi FL:15}



static void Test_BFu0ll_Ui_BFu15ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu15ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0ll_Ui_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0ll_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu15ll, BFu0ll_Ui_BFu15ll)
//============================================================================


struct  BFu0ll_Ui_BFu15s  {
  __tsu64  :0;
  unsigned int v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_Ui_BFu15s) C1{ FL:0 Fi Fs:15}



static void Test_BFu0ll_Ui_BFu15s()
{
  {
    init_simple_test("BFu0ll_Ui_BFu15s");
    static STRUCT_IF_C BFu0ll_Ui_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu15s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0ll_Ui_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0ll_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu15s, BFu0ll_Ui_BFu15s)
//============================================================================


struct  BFu0ll_Ui_BFu16i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:16;
};
//SIG(1 BFu0ll_Ui_BFu16i) C1{ FL:0 Fi Fi:16}



static void Test_BFu0ll_Ui_BFu16i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu16i");
    static STRUCT_IF_C BFu0ll_Ui_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0ll_Ui_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0ll_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu16i, BFu0ll_Ui_BFu16i)
//============================================================================


struct  BFu0ll_Ui_BFu16ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0ll_Ui_BFu16ll) C1{ FL:0 Fi FL:16}



static void Test_BFu0ll_Ui_BFu16ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu16ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0ll_Ui_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0ll_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu16ll, BFu0ll_Ui_BFu16ll)
//============================================================================


struct  BFu0ll_Ui_BFu16s  {
  __tsu64  :0;
  unsigned int v1;
  unsigned short v2:16;
};
//SIG(1 BFu0ll_Ui_BFu16s) C1{ FL:0 Fi Fs:16}



static void Test_BFu0ll_Ui_BFu16s()
{
  {
    init_simple_test("BFu0ll_Ui_BFu16s");
    static STRUCT_IF_C BFu0ll_Ui_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu16s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0ll_Ui_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0ll_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu16s, BFu0ll_Ui_BFu16s)
//============================================================================


struct  BFu0ll_Ui_BFu17i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_Ui_BFu17i) C1{ FL:0 Fi Fi:17}



static void Test_BFu0ll_Ui_BFu17i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu17i");
    static STRUCT_IF_C BFu0ll_Ui_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0ll_Ui_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0ll_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu17i, BFu0ll_Ui_BFu17i)
//============================================================================


struct  BFu0ll_Ui_BFu17ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_Ui_BFu17ll) C1{ FL:0 Fi FL:17}



static void Test_BFu0ll_Ui_BFu17ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu17ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0ll_Ui_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0ll_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu17ll, BFu0ll_Ui_BFu17ll)
//============================================================================


struct  BFu0ll_Ui_BFu1c  {
  __tsu64  :0;
  unsigned int v1;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_Ui_BFu1c) C1{ FL:0 Fi Fc:1}



static void Test_BFu0ll_Ui_BFu1c()
{
  {
    init_simple_test("BFu0ll_Ui_BFu1c");
    static STRUCT_IF_C BFu0ll_Ui_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu1c, BFu0ll_Ui_BFu1c)
//============================================================================


struct  BFu0ll_Ui_BFu1i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_Ui_BFu1i) C1{ FL:0 Fi Fi:1}



static void Test_BFu0ll_Ui_BFu1i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu1i");
    static STRUCT_IF_C BFu0ll_Ui_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu1i, BFu0ll_Ui_BFu1i)
//============================================================================


struct  BFu0ll_Ui_BFu1ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_Ui_BFu1ll) C1{ FL:0 Fi FL:1}



static void Test_BFu0ll_Ui_BFu1ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu1ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu1ll, BFu0ll_Ui_BFu1ll)
//============================================================================


struct  BFu0ll_Ui_BFu1s  {
  __tsu64  :0;
  unsigned int v1;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_Ui_BFu1s) C1{ FL:0 Fi Fs:1}



static void Test_BFu0ll_Ui_BFu1s()
{
  {
    init_simple_test("BFu0ll_Ui_BFu1s");
    static STRUCT_IF_C BFu0ll_Ui_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0ll_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu1s, BFu0ll_Ui_BFu1s)
//============================================================================


struct  BFu0ll_Ui_BFu31i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:31;
};
//SIG(1 BFu0ll_Ui_BFu31i) C1{ FL:0 Fi Fi:31}



static void Test_BFu0ll_Ui_BFu31i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu31i");
    static STRUCT_IF_C BFu0ll_Ui_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0ll_Ui_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0ll_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu31i, BFu0ll_Ui_BFu31i)
//============================================================================


struct  BFu0ll_Ui_BFu31ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_Ui_BFu31ll) C1{ FL:0 Fi FL:31}



static void Test_BFu0ll_Ui_BFu31ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu31ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0ll_Ui_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0ll_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu31ll, BFu0ll_Ui_BFu31ll)
//============================================================================


struct  BFu0ll_Ui_BFu32i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:32;
};
//SIG(1 BFu0ll_Ui_BFu32i) C1{ FL:0 Fi Fi:32}



static void Test_BFu0ll_Ui_BFu32i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu32i");
    static STRUCT_IF_C BFu0ll_Ui_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0ll_Ui_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0ll_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu32i, BFu0ll_Ui_BFu32i)
//============================================================================


struct  BFu0ll_Ui_BFu32ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_Ui_BFu32ll) C1{ FL:0 Fi FL:32}



static void Test_BFu0ll_Ui_BFu32ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu32ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0ll_Ui_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0ll_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu32ll, BFu0ll_Ui_BFu32ll)
//============================================================================


struct  BFu0ll_Ui_BFu33  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_Ui_BFu33) C1{ FL:0 Fi FL:33}



static void Test_BFu0ll_Ui_BFu33()
{
  {
    init_simple_test("BFu0ll_Ui_BFu33");
    static STRUCT_IF_C BFu0ll_Ui_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0ll_Ui_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0ll_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu33, BFu0ll_Ui_BFu33)
//============================================================================


struct  BFu0ll_Ui_BFu7c  {
  __tsu64  :0;
  unsigned int v1;
  unsigned char v2:7;
};
//SIG(1 BFu0ll_Ui_BFu7c) C1{ FL:0 Fi Fc:7}



static void Test_BFu0ll_Ui_BFu7c()
{
  {
    init_simple_test("BFu0ll_Ui_BFu7c");
    static STRUCT_IF_C BFu0ll_Ui_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu7c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0ll_Ui_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0ll_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu7c, BFu0ll_Ui_BFu7c)
//============================================================================


struct  BFu0ll_Ui_BFu7i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_Ui_BFu7i) C1{ FL:0 Fi Fi:7}



static void Test_BFu0ll_Ui_BFu7i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu7i");
    static STRUCT_IF_C BFu0ll_Ui_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0ll_Ui_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0ll_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu7i, BFu0ll_Ui_BFu7i)
//============================================================================


struct  BFu0ll_Ui_BFu7ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_Ui_BFu7ll) C1{ FL:0 Fi FL:7}



static void Test_BFu0ll_Ui_BFu7ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu7ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0ll_Ui_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0ll_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu7ll, BFu0ll_Ui_BFu7ll)
//============================================================================


struct  BFu0ll_Ui_BFu7s  {
  __tsu64  :0;
  unsigned int v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_Ui_BFu7s) C1{ FL:0 Fi Fs:7}



static void Test_BFu0ll_Ui_BFu7s()
{
  {
    init_simple_test("BFu0ll_Ui_BFu7s");
    static STRUCT_IF_C BFu0ll_Ui_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu7s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0ll_Ui_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0ll_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu7s, BFu0ll_Ui_BFu7s)
//============================================================================


struct  BFu0ll_Ui_BFu8c  {
  __tsu64  :0;
  unsigned int v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_Ui_BFu8c) C1{ FL:0 Fi Fc:8}



static void Test_BFu0ll_Ui_BFu8c()
{
  {
    init_simple_test("BFu0ll_Ui_BFu8c");
    static STRUCT_IF_C BFu0ll_Ui_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu8c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0ll_Ui_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0ll_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu8c, BFu0ll_Ui_BFu8c)
//============================================================================


struct  BFu0ll_Ui_BFu8i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_Ui_BFu8i) C1{ FL:0 Fi Fi:8}



static void Test_BFu0ll_Ui_BFu8i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu8i");
    static STRUCT_IF_C BFu0ll_Ui_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0ll_Ui_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0ll_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu8i, BFu0ll_Ui_BFu8i)
//============================================================================


struct  BFu0ll_Ui_BFu8ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_Ui_BFu8ll) C1{ FL:0 Fi FL:8}



static void Test_BFu0ll_Ui_BFu8ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu8ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0ll_Ui_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0ll_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu8ll, BFu0ll_Ui_BFu8ll)
//============================================================================


struct  BFu0ll_Ui_BFu8s  {
  __tsu64  :0;
  unsigned int v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_Ui_BFu8s) C1{ FL:0 Fi Fs:8}



static void Test_BFu0ll_Ui_BFu8s()
{
  {
    init_simple_test("BFu0ll_Ui_BFu8s");
    static STRUCT_IF_C BFu0ll_Ui_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu8s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0ll_Ui_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0ll_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu8s, BFu0ll_Ui_BFu8s)
//============================================================================


struct  BFu0ll_Ui_BFu9i  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_Ui_BFu9i) C1{ FL:0 Fi Fi:9}



static void Test_BFu0ll_Ui_BFu9i()
{
  {
    init_simple_test("BFu0ll_Ui_BFu9i");
    static STRUCT_IF_C BFu0ll_Ui_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0ll_Ui_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0ll_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu9i, BFu0ll_Ui_BFu9i)
//============================================================================


struct  BFu0ll_Ui_BFu9ll  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_Ui_BFu9ll) C1{ FL:0 Fi FL:9}



static void Test_BFu0ll_Ui_BFu9ll()
{
  {
    init_simple_test("BFu0ll_Ui_BFu9ll");
    static STRUCT_IF_C BFu0ll_Ui_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0ll_Ui_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0ll_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu9ll, BFu0ll_Ui_BFu9ll)
//============================================================================


struct  BFu0ll_Ui_BFu9s  {
  __tsu64  :0;
  unsigned int v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_Ui_BFu9s) C1{ FL:0 Fi Fs:9}



static void Test_BFu0ll_Ui_BFu9s()
{
  {
    init_simple_test("BFu0ll_Ui_BFu9s");
    static STRUCT_IF_C BFu0ll_Ui_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_BFu9s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0ll_Ui_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0ll_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_BFu9s, BFu0ll_Ui_BFu9s)
//============================================================================


struct  BFu0ll_Ui_C  {
  __tsu64  :0;
  unsigned int v1;
  char v2;
};
//SIG(1 BFu0ll_Ui_C) C1{ FL:0 Fi Fc}



static void Test_BFu0ll_Ui_C()
{
  {
    init_simple_test("BFu0ll_Ui_C");
    static STRUCT_IF_C BFu0ll_Ui_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_C.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Ui_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_C, BFu0ll_Ui_C)
//============================================================================


struct  BFu0ll_Ui_D  {
  __tsu64  :0;
  unsigned int v1;
  double v2;
};
//SIG(1 BFu0ll_Ui_D) C1{ FL:0 Fi FL}



static void Test_BFu0ll_Ui_D()
{
  {
    init_simple_test("BFu0ll_Ui_D");
    static STRUCT_IF_C BFu0ll_Ui_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ui_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_D, BFu0ll_Ui_D)
//============================================================================


struct  BFu0ll_Ui_F  {
  __tsu64  :0;
  unsigned int v1;
  float v2;
};
//SIG(1 BFu0ll_Ui_F) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_Ui_F()
{
  {
    init_simple_test("BFu0ll_Ui_F");
    static STRUCT_IF_C BFu0ll_Ui_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_F.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Ui_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_F, BFu0ll_Ui_F)
//============================================================================


struct  BFu0ll_Ui_I  {
  __tsu64  :0;
  unsigned int v1;
  int v2;
};
//SIG(1 BFu0ll_Ui_I) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_Ui_I()
{
  {
    init_simple_test("BFu0ll_Ui_I");
    static STRUCT_IF_C BFu0ll_Ui_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_I.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Ui_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_I, BFu0ll_Ui_I)
//============================================================================


struct  BFu0ll_Ui_Ip  {
  __tsu64  :0;
  unsigned int v1;
  int *v2;
};
//SIG(1 BFu0ll_Ui_Ip) C1{ FL:0 Fi Fp}



static void Test_BFu0ll_Ui_Ip()
{
  {
    init_simple_test("BFu0ll_Ui_Ip");
    static STRUCT_IF_C BFu0ll_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ui_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_Ip, BFu0ll_Ui_Ip)
//============================================================================


struct  BFu0ll_Ui_L  {
  __tsu64  :0;
  unsigned int v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_Ui_L) C1{ FL:0 Fi FL}



static void Test_BFu0ll_Ui_L()
{
  {
    init_simple_test("BFu0ll_Ui_L");
    static STRUCT_IF_C BFu0ll_Ui_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ui_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_L, BFu0ll_Ui_L)
//============================================================================


struct  BFu0ll_Ui_S  {
  __tsu64  :0;
  unsigned int v1;
  short v2;
};
//SIG(1 BFu0ll_Ui_S) C1{ FL:0 Fi Fs}



static void Test_BFu0ll_Ui_S()
{
  {
    init_simple_test("BFu0ll_Ui_S");
    static STRUCT_IF_C BFu0ll_Ui_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_S.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Ui_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_S, BFu0ll_Ui_S)
//============================================================================


struct  BFu0ll_Ui_Uc  {
  __tsu64  :0;
  unsigned int v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_Ui_Uc) C1{ FL:0 Fi Fc}



static void Test_BFu0ll_Ui_Uc()
{
  {
    init_simple_test("BFu0ll_Ui_Uc");
    static STRUCT_IF_C BFu0ll_Ui_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_Uc.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Ui_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_Uc, BFu0ll_Ui_Uc)
//============================================================================


struct  BFu0ll_Ui_Ui  {
  __tsu64  :0;
  unsigned int v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_Ui_Ui) C1{ FL:0 Fi[2]}



static void Test_BFu0ll_Ui_Ui()
{
  {
    init_simple_test("BFu0ll_Ui_Ui");
    static STRUCT_IF_C BFu0ll_Ui_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Ui_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_Ui, BFu0ll_Ui_Ui)
//============================================================================


struct  BFu0ll_Ui_Ul  {
  __tsu64  :0;
  unsigned int v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_Ui_Ul) C1{ FL:0 Fi FL}



static void Test_BFu0ll_Ui_Ul()
{
  {
    init_simple_test("BFu0ll_Ui_Ul");
    static STRUCT_IF_C BFu0ll_Ui_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ui_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_Ul, BFu0ll_Ui_Ul)
//============================================================================


struct  BFu0ll_Ui_Us  {
  __tsu64  :0;
  unsigned int v1;
  unsigned short v2;
};
//SIG(1 BFu0ll_Ui_Us) C1{ FL:0 Fi Fs}



static void Test_BFu0ll_Ui_Us()
{
  {
    init_simple_test("BFu0ll_Ui_Us");
    static STRUCT_IF_C BFu0ll_Ui_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ui_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Ui_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_Us.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Ui_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_Us, BFu0ll_Ui_Us)
//============================================================================


struct  BFu0ll_Ui_Vp  {
  __tsu64  :0;
  unsigned int v1;
  void *v2;
};
//SIG(1 BFu0ll_Ui_Vp) C1{ FL:0 Fi Fp}



static void Test_BFu0ll_Ui_Vp()
{
  {
    init_simple_test("BFu0ll_Ui_Vp");
    static STRUCT_IF_C BFu0ll_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ui_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ui_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Ui_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ui_Vp, BFu0ll_Ui_Vp)
//============================================================================


struct  BFu0ll_Ul  {
  __tsu64  :0;
  __tsu64 v1;
};
//SIG(1 BFu0ll_Ul) C1{ FL:0 FL}



static void Test_BFu0ll_Ul()
{
  {
    init_simple_test("BFu0ll_Ul");
    static STRUCT_IF_C BFu0ll_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul, BFu0ll_Ul)
//============================================================================


struct  BFu0ll_Ul_BFu0c  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_Ul_BFu0c) C1{ FL:0 FL Fc:0}



static void Test_BFu0ll_Ul_BFu0c()
{
  {
    init_simple_test("BFu0ll_Ul_BFu0c");
    static STRUCT_IF_C BFu0ll_Ul_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu0c, BFu0ll_Ul_BFu0c)
//============================================================================


struct  BFu0ll_Ul_BFu0i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_Ul_BFu0i) C1{ FL:0 FL Fi:0}



static void Test_BFu0ll_Ul_BFu0i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu0i");
    static STRUCT_IF_C BFu0ll_Ul_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu0i, BFu0ll_Ul_BFu0i)
//============================================================================


struct  BFu0ll_Ul_BFu0ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_Ul_BFu0ll) C1{ FL:0 FL FL:0}



static void Test_BFu0ll_Ul_BFu0ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu0ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu0ll, BFu0ll_Ul_BFu0ll)
//============================================================================


struct  BFu0ll_Ul_BFu0s  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_Ul_BFu0s) C1{ FL:0 FL Fs:0}



static void Test_BFu0ll_Ul_BFu0s()
{
  {
    init_simple_test("BFu0ll_Ul_BFu0s");
    static STRUCT_IF_C BFu0ll_Ul_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu0s, BFu0ll_Ul_BFu0s)
//============================================================================


struct  BFu0ll_Ul_BFu15i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_Ul_BFu15i) C1{ FL:0 FL Fi:15}



static void Test_BFu0ll_Ul_BFu15i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu15i");
    static STRUCT_IF_C BFu0ll_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0ll_Ul_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0ll_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu15i, BFu0ll_Ul_BFu15i)
//============================================================================


struct  BFu0ll_Ul_BFu15ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_Ul_BFu15ll) C1{ FL:0 FL FL:15}



static void Test_BFu0ll_Ul_BFu15ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu15ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0ll_Ul_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0ll_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu15ll, BFu0ll_Ul_BFu15ll)
//============================================================================


struct  BFu0ll_Ul_BFu15s  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_Ul_BFu15s) C1{ FL:0 FL Fs:15}



static void Test_BFu0ll_Ul_BFu15s()
{
  {
    init_simple_test("BFu0ll_Ul_BFu15s");
    static STRUCT_IF_C BFu0ll_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu0ll_Ul_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu0ll_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu15s, BFu0ll_Ul_BFu15s)
//============================================================================


struct  BFu0ll_Ul_BFu16i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:16;
};
//SIG(1 BFu0ll_Ul_BFu16i) C1{ FL:0 FL Fi:16}



static void Test_BFu0ll_Ul_BFu16i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu16i");
    static STRUCT_IF_C BFu0ll_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0ll_Ul_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0ll_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu16i, BFu0ll_Ul_BFu16i)
//============================================================================


struct  BFu0ll_Ul_BFu16ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0ll_Ul_BFu16ll) C1{ FL:0 FL FL:16}



static void Test_BFu0ll_Ul_BFu16ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu16ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0ll_Ul_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0ll_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu16ll, BFu0ll_Ul_BFu16ll)
//============================================================================


struct  BFu0ll_Ul_BFu16s  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned short v2:16;
};
//SIG(1 BFu0ll_Ul_BFu16s) C1{ FL:0 FL Fs:16}



static void Test_BFu0ll_Ul_BFu16s()
{
  {
    init_simple_test("BFu0ll_Ul_BFu16s");
    static STRUCT_IF_C BFu0ll_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu0ll_Ul_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu0ll_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu16s, BFu0ll_Ul_BFu16s)
//============================================================================


struct  BFu0ll_Ul_BFu17i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_Ul_BFu17i) C1{ FL:0 FL Fi:17}



static void Test_BFu0ll_Ul_BFu17i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu17i");
    static STRUCT_IF_C BFu0ll_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu0ll_Ul_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu0ll_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu17i, BFu0ll_Ul_BFu17i)
//============================================================================


struct  BFu0ll_Ul_BFu17ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_Ul_BFu17ll) C1{ FL:0 FL FL:17}



static void Test_BFu0ll_Ul_BFu17ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu17ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu0ll_Ul_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu0ll_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu17ll, BFu0ll_Ul_BFu17ll)
//============================================================================


struct  BFu0ll_Ul_BFu1c  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_Ul_BFu1c) C1{ FL:0 FL Fc:1}



static void Test_BFu0ll_Ul_BFu1c()
{
  {
    init_simple_test("BFu0ll_Ul_BFu1c");
    static STRUCT_IF_C BFu0ll_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu1c, BFu0ll_Ul_BFu1c)
//============================================================================


struct  BFu0ll_Ul_BFu1i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_Ul_BFu1i) C1{ FL:0 FL Fi:1}



static void Test_BFu0ll_Ul_BFu1i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu1i");
    static STRUCT_IF_C BFu0ll_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu1i, BFu0ll_Ul_BFu1i)
//============================================================================


struct  BFu0ll_Ul_BFu1ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_Ul_BFu1ll) C1{ FL:0 FL FL:1}



static void Test_BFu0ll_Ul_BFu1ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu1ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu1ll, BFu0ll_Ul_BFu1ll)
//============================================================================


struct  BFu0ll_Ul_BFu1s  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_Ul_BFu1s) C1{ FL:0 FL Fs:1}



static void Test_BFu0ll_Ul_BFu1s()
{
  {
    init_simple_test("BFu0ll_Ul_BFu1s");
    static STRUCT_IF_C BFu0ll_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu0ll_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu1s, BFu0ll_Ul_BFu1s)
//============================================================================


struct  BFu0ll_Ul_BFu31i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:31;
};
//SIG(1 BFu0ll_Ul_BFu31i) C1{ FL:0 FL Fi:31}



static void Test_BFu0ll_Ul_BFu31i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu31i");
    static STRUCT_IF_C BFu0ll_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu0ll_Ul_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu0ll_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu31i, BFu0ll_Ul_BFu31i)
//============================================================================


struct  BFu0ll_Ul_BFu31ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_Ul_BFu31ll) C1{ FL:0 FL FL:31}



static void Test_BFu0ll_Ul_BFu31ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu31ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu0ll_Ul_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu0ll_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu31ll, BFu0ll_Ul_BFu31ll)
//============================================================================


struct  BFu0ll_Ul_BFu32i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:32;
};
//SIG(1 BFu0ll_Ul_BFu32i) C1{ FL:0 FL Fi:32}



static void Test_BFu0ll_Ul_BFu32i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu32i");
    static STRUCT_IF_C BFu0ll_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0ll_Ul_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0ll_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu32i, BFu0ll_Ul_BFu32i)
//============================================================================


struct  BFu0ll_Ul_BFu32ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_Ul_BFu32ll) C1{ FL:0 FL FL:32}



static void Test_BFu0ll_Ul_BFu32ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu32ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0ll_Ul_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0ll_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu32ll, BFu0ll_Ul_BFu32ll)
//============================================================================


struct  BFu0ll_Ul_BFu33  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_Ul_BFu33) C1{ FL:0 FL FL:33}



static void Test_BFu0ll_Ul_BFu33()
{
  {
    init_simple_test("BFu0ll_Ul_BFu33");
    static STRUCT_IF_C BFu0ll_Ul_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "BFu0ll_Ul_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "BFu0ll_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu33, BFu0ll_Ul_BFu33)
//============================================================================


struct  BFu0ll_Ul_BFu7c  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned char v2:7;
};
//SIG(1 BFu0ll_Ul_BFu7c) C1{ FL:0 FL Fc:7}



static void Test_BFu0ll_Ul_BFu7c()
{
  {
    init_simple_test("BFu0ll_Ul_BFu7c");
    static STRUCT_IF_C BFu0ll_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0ll_Ul_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0ll_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu7c, BFu0ll_Ul_BFu7c)
//============================================================================


struct  BFu0ll_Ul_BFu7i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_Ul_BFu7i) C1{ FL:0 FL Fi:7}



static void Test_BFu0ll_Ul_BFu7i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu7i");
    static STRUCT_IF_C BFu0ll_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0ll_Ul_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0ll_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu7i, BFu0ll_Ul_BFu7i)
//============================================================================


struct  BFu0ll_Ul_BFu7ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_Ul_BFu7ll) C1{ FL:0 FL FL:7}



static void Test_BFu0ll_Ul_BFu7ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu7ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0ll_Ul_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0ll_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu7ll, BFu0ll_Ul_BFu7ll)
//============================================================================


struct  BFu0ll_Ul_BFu7s  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_Ul_BFu7s) C1{ FL:0 FL Fs:7}



static void Test_BFu0ll_Ul_BFu7s()
{
  {
    init_simple_test("BFu0ll_Ul_BFu7s");
    static STRUCT_IF_C BFu0ll_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu0ll_Ul_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu0ll_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu7s, BFu0ll_Ul_BFu7s)
//============================================================================


struct  BFu0ll_Ul_BFu8c  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_Ul_BFu8c) C1{ FL:0 FL Fc:8}



static void Test_BFu0ll_Ul_BFu8c()
{
  {
    init_simple_test("BFu0ll_Ul_BFu8c");
    static STRUCT_IF_C BFu0ll_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0ll_Ul_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0ll_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu8c, BFu0ll_Ul_BFu8c)
//============================================================================


struct  BFu0ll_Ul_BFu8i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_Ul_BFu8i) C1{ FL:0 FL Fi:8}



static void Test_BFu0ll_Ul_BFu8i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu8i");
    static STRUCT_IF_C BFu0ll_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0ll_Ul_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0ll_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu8i, BFu0ll_Ul_BFu8i)
//============================================================================


struct  BFu0ll_Ul_BFu8ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_Ul_BFu8ll) C1{ FL:0 FL FL:8}



static void Test_BFu0ll_Ul_BFu8ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu8ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0ll_Ul_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0ll_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu8ll, BFu0ll_Ul_BFu8ll)
//============================================================================


struct  BFu0ll_Ul_BFu8s  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_Ul_BFu8s) C1{ FL:0 FL Fs:8}



static void Test_BFu0ll_Ul_BFu8s()
{
  {
    init_simple_test("BFu0ll_Ul_BFu8s");
    static STRUCT_IF_C BFu0ll_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu0ll_Ul_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu0ll_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu8s, BFu0ll_Ul_BFu8s)
//============================================================================


struct  BFu0ll_Ul_BFu9i  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_Ul_BFu9i) C1{ FL:0 FL Fi:9}



static void Test_BFu0ll_Ul_BFu9i()
{
  {
    init_simple_test("BFu0ll_Ul_BFu9i");
    static STRUCT_IF_C BFu0ll_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0ll_Ul_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0ll_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu9i, BFu0ll_Ul_BFu9i)
//============================================================================


struct  BFu0ll_Ul_BFu9ll  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_Ul_BFu9ll) C1{ FL:0 FL FL:9}



static void Test_BFu0ll_Ul_BFu9ll()
{
  {
    init_simple_test("BFu0ll_Ul_BFu9ll");
    static STRUCT_IF_C BFu0ll_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0ll_Ul_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0ll_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu9ll, BFu0ll_Ul_BFu9ll)
//============================================================================


struct  BFu0ll_Ul_BFu9s  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_Ul_BFu9s) C1{ FL:0 FL Fs:9}



static void Test_BFu0ll_Ul_BFu9s()
{
  {
    init_simple_test("BFu0ll_Ul_BFu9s");
    static STRUCT_IF_C BFu0ll_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu0ll_Ul_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu0ll_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_BFu9s, BFu0ll_Ul_BFu9s)
//============================================================================


struct  BFu0ll_Ul_C  {
  __tsu64  :0;
  __tsu64 v1;
  char v2;
};
//SIG(1 BFu0ll_Ul_C) C1{ FL:0 FL Fc}



static void Test_BFu0ll_Ul_C()
{
  {
    init_simple_test("BFu0ll_Ul_C");
    static STRUCT_IF_C BFu0ll_Ul_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_C.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_C, BFu0ll_Ul_C)
//============================================================================


struct  BFu0ll_Ul_D  {
  __tsu64  :0;
  __tsu64 v1;
  double v2;
};
//SIG(1 BFu0ll_Ul_D) C1{ FL:0 FL[2]}



static void Test_BFu0ll_Ul_D()
{
  {
    init_simple_test("BFu0ll_Ul_D");
    static STRUCT_IF_C BFu0ll_Ul_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_D.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_D, BFu0ll_Ul_D)
//============================================================================


struct  BFu0ll_Ul_F  {
  __tsu64  :0;
  __tsu64 v1;
  float v2;
};
//SIG(1 BFu0ll_Ul_F) C1{ FL:0 FL Fi}



static void Test_BFu0ll_Ul_F()
{
  {
    init_simple_test("BFu0ll_Ul_F");
    static STRUCT_IF_C BFu0ll_Ul_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_F.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_F, BFu0ll_Ul_F)
//============================================================================


struct  BFu0ll_Ul_I  {
  __tsu64  :0;
  __tsu64 v1;
  int v2;
};
//SIG(1 BFu0ll_Ul_I) C1{ FL:0 FL Fi}



static void Test_BFu0ll_Ul_I()
{
  {
    init_simple_test("BFu0ll_Ul_I");
    static STRUCT_IF_C BFu0ll_Ul_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_I.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_I, BFu0ll_Ul_I)
//============================================================================


struct  BFu0ll_Ul_Ip  {
  __tsu64  :0;
  __tsu64 v1;
  int *v2;
};
//SIG(1 BFu0ll_Ul_Ip) C1{ FL:0 FL Fp}



static void Test_BFu0ll_Ul_Ip()
{
  {
    init_simple_test("BFu0ll_Ul_Ip");
    static STRUCT_IF_C BFu0ll_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_Ip.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_Ip, BFu0ll_Ul_Ip)
//============================================================================


struct  BFu0ll_Ul_L  {
  __tsu64  :0;
  __tsu64 v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_Ul_L) C1{ FL:0 FL[2]}



static void Test_BFu0ll_Ul_L()
{
  {
    init_simple_test("BFu0ll_Ul_L");
    static STRUCT_IF_C BFu0ll_Ul_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_L.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_L, BFu0ll_Ul_L)
//============================================================================


struct  BFu0ll_Ul_S  {
  __tsu64  :0;
  __tsu64 v1;
  short v2;
};
//SIG(1 BFu0ll_Ul_S) C1{ FL:0 FL Fs}



static void Test_BFu0ll_Ul_S()
{
  {
    init_simple_test("BFu0ll_Ul_S");
    static STRUCT_IF_C BFu0ll_Ul_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_S.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_S, BFu0ll_Ul_S)
//============================================================================


struct  BFu0ll_Ul_Uc  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_Ul_Uc) C1{ FL:0 FL Fc}



static void Test_BFu0ll_Ul_Uc()
{
  {
    init_simple_test("BFu0ll_Ul_Uc");
    static STRUCT_IF_C BFu0ll_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_Uc.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_Uc, BFu0ll_Ul_Uc)
//============================================================================


struct  BFu0ll_Ul_Ui  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_Ul_Ui) C1{ FL:0 FL Fi}



static void Test_BFu0ll_Ul_Ui()
{
  {
    init_simple_test("BFu0ll_Ul_Ui");
    static STRUCT_IF_C BFu0ll_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_Ui.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_Ui, BFu0ll_Ul_Ui)
//============================================================================


struct  BFu0ll_Ul_Ul  {
  __tsu64  :0;
  __tsu64 v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_Ul_Ul) C1{ FL:0 FL[2]}



static void Test_BFu0ll_Ul_Ul()
{
  {
    init_simple_test("BFu0ll_Ul_Ul");
    static STRUCT_IF_C BFu0ll_Ul_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu0ll_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_Ul.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_Ul, BFu0ll_Ul_Ul)
//============================================================================


struct  BFu0ll_Ul_Us  {
  __tsu64  :0;
  __tsu64 v1;
  unsigned short v2;
};
//SIG(1 BFu0ll_Ul_Us) C1{ FL:0 FL Fs}



static void Test_BFu0ll_Ul_Us()
{
  {
    init_simple_test("BFu0ll_Ul_Us");
    static STRUCT_IF_C BFu0ll_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_Us.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_Us, BFu0ll_Ul_Us)
//============================================================================


struct  BFu0ll_Ul_Vp  {
  __tsu64  :0;
  __tsu64 v1;
  void *v2;
};
//SIG(1 BFu0ll_Ul_Vp) C1{ FL:0 FL Fp}



static void Test_BFu0ll_Ul_Vp()
{
  {
    init_simple_test("BFu0ll_Ul_Vp");
    static STRUCT_IF_C BFu0ll_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Ul_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_Ul_Vp.v1");
    check_field_offset(lv, v2, 8, "BFu0ll_Ul_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Ul_Vp, BFu0ll_Ul_Vp)
//============================================================================


struct  BFu0ll_Us  {
  __tsu64  :0;
  unsigned short v1;
};
//SIG(1 BFu0ll_Us) C1{ FL:0 Fs}



static void Test_BFu0ll_Us()
{
  {
    init_simple_test("BFu0ll_Us");
    static STRUCT_IF_C BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us, BFu0ll_Us)
//============================================================================


struct  BFu0ll_Us_BFu0c  {
  __tsu64  :0;
  unsigned short v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_Us_BFu0c) C1{ FL:0 Fs Fc:0}



static void Test_BFu0ll_Us_BFu0c()
{
  {
    init_simple_test("BFu0ll_Us_BFu0c");
    static STRUCT_IF_C BFu0ll_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu0c, BFu0ll_Us_BFu0c)
//============================================================================


struct  BFu0ll_Us_BFu0i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_Us_BFu0i) C1{ FL:0 Fs Fi:0}



static void Test_BFu0ll_Us_BFu0i()
{
  {
    init_simple_test("BFu0ll_Us_BFu0i");
    static STRUCT_IF_C BFu0ll_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu0i, BFu0ll_Us_BFu0i)
//============================================================================


struct  BFu0ll_Us_BFu0ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_Us_BFu0ll) C1{ FL:0 Fs FL:0}



static void Test_BFu0ll_Us_BFu0ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu0ll");
    static STRUCT_IF_C BFu0ll_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu0ll, BFu0ll_Us_BFu0ll)
//============================================================================


struct  BFu0ll_Us_BFu0s  {
  __tsu64  :0;
  unsigned short v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_Us_BFu0s) C1{ FL:0 Fs Fs:0}



static void Test_BFu0ll_Us_BFu0s()
{
  {
    init_simple_test("BFu0ll_Us_BFu0s");
    static STRUCT_IF_C BFu0ll_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0ll_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu0s, BFu0ll_Us_BFu0s)
//============================================================================


struct  BFu0ll_Us_BFu15i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_Us_BFu15i) C1{ FL:0 Fs Fi:15}



static void Test_BFu0ll_Us_BFu15i()
{
  {
    init_simple_test("BFu0ll_Us_BFu15i");
    static STRUCT_IF_C BFu0ll_Us_BFu15i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0ll_Us_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0ll_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu15i, BFu0ll_Us_BFu15i)
//============================================================================


struct  BFu0ll_Us_BFu15ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_Us_BFu15ll) C1{ FL:0 Fs FL:15}



static void Test_BFu0ll_Us_BFu15ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu15ll");
    static STRUCT_IF_C BFu0ll_Us_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0ll_Us_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0ll_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu15ll, BFu0ll_Us_BFu15ll)
//============================================================================


struct  BFu0ll_Us_BFu15s  {
  __tsu64  :0;
  unsigned short v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_Us_BFu15s) C1{ FL:0 Fs Fs:15}



static void Test_BFu0ll_Us_BFu15s()
{
  {
    init_simple_test("BFu0ll_Us_BFu15s");
    static STRUCT_IF_C BFu0ll_Us_BFu15s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0ll_Us_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0ll_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu15s, BFu0ll_Us_BFu15s)
//============================================================================


struct  BFu0ll_Us_BFu16i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:16;
};
//SIG(1 BFu0ll_Us_BFu16i) C1{ FL:0 Fs Fi:16}



static void Test_BFu0ll_Us_BFu16i()
{
  {
    init_simple_test("BFu0ll_Us_BFu16i");
    static STRUCT_IF_C BFu0ll_Us_BFu16i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0ll_Us_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0ll_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu16i, BFu0ll_Us_BFu16i)
//============================================================================


struct  BFu0ll_Us_BFu16ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0ll_Us_BFu16ll) C1{ FL:0 Fs FL:16}



static void Test_BFu0ll_Us_BFu16ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu16ll");
    static STRUCT_IF_C BFu0ll_Us_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0ll_Us_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0ll_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu16ll, BFu0ll_Us_BFu16ll)
//============================================================================


struct  BFu0ll_Us_BFu16s  {
  __tsu64  :0;
  unsigned short v1;
  unsigned short v2:16;
};
//SIG(1 BFu0ll_Us_BFu16s) C1{ FL:0 Fs Fs:16}



static void Test_BFu0ll_Us_BFu16s()
{
  {
    init_simple_test("BFu0ll_Us_BFu16s");
    static STRUCT_IF_C BFu0ll_Us_BFu16s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0ll_Us_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0ll_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu16s, BFu0ll_Us_BFu16s)
//============================================================================


struct  BFu0ll_Us_BFu17i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_Us_BFu17i) C1{ FL:0 Fs Fi:17}



static void Test_BFu0ll_Us_BFu17i()
{
  {
    init_simple_test("BFu0ll_Us_BFu17i");
    static STRUCT_IF_C BFu0ll_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0ll_Us_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0ll_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu17i, BFu0ll_Us_BFu17i)
//============================================================================


struct  BFu0ll_Us_BFu17ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_Us_BFu17ll) C1{ FL:0 Fs FL:17}



static void Test_BFu0ll_Us_BFu17ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu17ll");
    static STRUCT_IF_C BFu0ll_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0ll_Us_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0ll_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu17ll, BFu0ll_Us_BFu17ll)
//============================================================================


struct  BFu0ll_Us_BFu1c  {
  __tsu64  :0;
  unsigned short v1;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_Us_BFu1c) C1{ FL:0 Fs Fc:1}



static void Test_BFu0ll_Us_BFu1c()
{
  {
    init_simple_test("BFu0ll_Us_BFu1c");
    static STRUCT_IF_C BFu0ll_Us_BFu1c lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0ll_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu1c, BFu0ll_Us_BFu1c)
//============================================================================


struct  BFu0ll_Us_BFu1i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_Us_BFu1i) C1{ FL:0 Fs Fi:1}



static void Test_BFu0ll_Us_BFu1i()
{
  {
    init_simple_test("BFu0ll_Us_BFu1i");
    static STRUCT_IF_C BFu0ll_Us_BFu1i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0ll_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu1i, BFu0ll_Us_BFu1i)
//============================================================================


struct  BFu0ll_Us_BFu1ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_Us_BFu1ll) C1{ FL:0 Fs FL:1}



static void Test_BFu0ll_Us_BFu1ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu1ll");
    static STRUCT_IF_C BFu0ll_Us_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0ll_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu1ll, BFu0ll_Us_BFu1ll)
//============================================================================


struct  BFu0ll_Us_BFu1s  {
  __tsu64  :0;
  unsigned short v1;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_Us_BFu1s) C1{ FL:0 Fs Fs:1}



static void Test_BFu0ll_Us_BFu1s()
{
  {
    init_simple_test("BFu0ll_Us_BFu1s");
    static STRUCT_IF_C BFu0ll_Us_BFu1s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0ll_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu1s, BFu0ll_Us_BFu1s)
//============================================================================


struct  BFu0ll_Us_BFu31i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:31;
};
//SIG(1 BFu0ll_Us_BFu31i) C1{ FL:0 Fs Fi:31}



static void Test_BFu0ll_Us_BFu31i()
{
  {
    init_simple_test("BFu0ll_Us_BFu31i");
    static STRUCT_IF_C BFu0ll_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0ll_Us_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0ll_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu31i, BFu0ll_Us_BFu31i)
//============================================================================


struct  BFu0ll_Us_BFu31ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_Us_BFu31ll) C1{ FL:0 Fs FL:31}



static void Test_BFu0ll_Us_BFu31ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu31ll");
    static STRUCT_IF_C BFu0ll_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0ll_Us_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0ll_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu31ll, BFu0ll_Us_BFu31ll)
//============================================================================


struct  BFu0ll_Us_BFu32i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:32;
};
//SIG(1 BFu0ll_Us_BFu32i) C1{ FL:0 Fs Fi:32}



static void Test_BFu0ll_Us_BFu32i()
{
  {
    init_simple_test("BFu0ll_Us_BFu32i");
    static STRUCT_IF_C BFu0ll_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0ll_Us_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0ll_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu32i, BFu0ll_Us_BFu32i)
//============================================================================


struct  BFu0ll_Us_BFu32ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_Us_BFu32ll) C1{ FL:0 Fs FL:32}



static void Test_BFu0ll_Us_BFu32ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu32ll");
    static STRUCT_IF_C BFu0ll_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0ll_Us_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0ll_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu32ll, BFu0ll_Us_BFu32ll)
//============================================================================


struct  BFu0ll_Us_BFu33  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_Us_BFu33) C1{ FL:0 Fs FL:33}



static void Test_BFu0ll_Us_BFu33()
{
  {
    init_simple_test("BFu0ll_Us_BFu33");
    static STRUCT_IF_C BFu0ll_Us_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0ll_Us_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0ll_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu33, BFu0ll_Us_BFu33)
//============================================================================


struct  BFu0ll_Us_BFu7c  {
  __tsu64  :0;
  unsigned short v1;
  unsigned char v2:7;
};
//SIG(1 BFu0ll_Us_BFu7c) C1{ FL:0 Fs Fc:7}



static void Test_BFu0ll_Us_BFu7c()
{
  {
    init_simple_test("BFu0ll_Us_BFu7c");
    static STRUCT_IF_C BFu0ll_Us_BFu7c lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0ll_Us_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0ll_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu7c, BFu0ll_Us_BFu7c)
//============================================================================


struct  BFu0ll_Us_BFu7i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_Us_BFu7i) C1{ FL:0 Fs Fi:7}



static void Test_BFu0ll_Us_BFu7i()
{
  {
    init_simple_test("BFu0ll_Us_BFu7i");
    static STRUCT_IF_C BFu0ll_Us_BFu7i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0ll_Us_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0ll_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu7i, BFu0ll_Us_BFu7i)
//============================================================================


struct  BFu0ll_Us_BFu7ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_Us_BFu7ll) C1{ FL:0 Fs FL:7}



static void Test_BFu0ll_Us_BFu7ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu7ll");
    static STRUCT_IF_C BFu0ll_Us_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0ll_Us_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0ll_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu7ll, BFu0ll_Us_BFu7ll)
//============================================================================


struct  BFu0ll_Us_BFu7s  {
  __tsu64  :0;
  unsigned short v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_Us_BFu7s) C1{ FL:0 Fs Fs:7}



static void Test_BFu0ll_Us_BFu7s()
{
  {
    init_simple_test("BFu0ll_Us_BFu7s");
    static STRUCT_IF_C BFu0ll_Us_BFu7s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0ll_Us_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0ll_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu7s, BFu0ll_Us_BFu7s)
//============================================================================


struct  BFu0ll_Us_BFu8c  {
  __tsu64  :0;
  unsigned short v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_Us_BFu8c) C1{ FL:0 Fs Fc:8}



static void Test_BFu0ll_Us_BFu8c()
{
  {
    init_simple_test("BFu0ll_Us_BFu8c");
    static STRUCT_IF_C BFu0ll_Us_BFu8c lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0ll_Us_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0ll_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu8c, BFu0ll_Us_BFu8c)
//============================================================================


struct  BFu0ll_Us_BFu8i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_Us_BFu8i) C1{ FL:0 Fs Fi:8}



static void Test_BFu0ll_Us_BFu8i()
{
  {
    init_simple_test("BFu0ll_Us_BFu8i");
    static STRUCT_IF_C BFu0ll_Us_BFu8i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0ll_Us_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0ll_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu8i, BFu0ll_Us_BFu8i)
//============================================================================


struct  BFu0ll_Us_BFu8ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_Us_BFu8ll) C1{ FL:0 Fs FL:8}



static void Test_BFu0ll_Us_BFu8ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu8ll");
    static STRUCT_IF_C BFu0ll_Us_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0ll_Us_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0ll_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu8ll, BFu0ll_Us_BFu8ll)
//============================================================================


struct  BFu0ll_Us_BFu8s  {
  __tsu64  :0;
  unsigned short v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_Us_BFu8s) C1{ FL:0 Fs Fs:8}



static void Test_BFu0ll_Us_BFu8s()
{
  {
    init_simple_test("BFu0ll_Us_BFu8s");
    static STRUCT_IF_C BFu0ll_Us_BFu8s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0ll_Us_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0ll_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu8s, BFu0ll_Us_BFu8s)
//============================================================================


struct  BFu0ll_Us_BFu9i  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_Us_BFu9i) C1{ FL:0 Fs Fi:9}



static void Test_BFu0ll_Us_BFu9i()
{
  {
    init_simple_test("BFu0ll_Us_BFu9i");
    static STRUCT_IF_C BFu0ll_Us_BFu9i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0ll_Us_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0ll_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu9i, BFu0ll_Us_BFu9i)
//============================================================================


struct  BFu0ll_Us_BFu9ll  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_Us_BFu9ll) C1{ FL:0 Fs FL:9}



static void Test_BFu0ll_Us_BFu9ll()
{
  {
    init_simple_test("BFu0ll_Us_BFu9ll");
    static STRUCT_IF_C BFu0ll_Us_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0ll_Us_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0ll_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu9ll, BFu0ll_Us_BFu9ll)
//============================================================================


struct  BFu0ll_Us_BFu9s  {
  __tsu64  :0;
  unsigned short v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_Us_BFu9s) C1{ FL:0 Fs Fs:9}



static void Test_BFu0ll_Us_BFu9s()
{
  {
    init_simple_test("BFu0ll_Us_BFu9s");
    static STRUCT_IF_C BFu0ll_Us_BFu9s lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0ll_Us_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0ll_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_BFu9s, BFu0ll_Us_BFu9s)
//============================================================================


struct  BFu0ll_Us_C  {
  __tsu64  :0;
  unsigned short v1;
  char v2;
};
//SIG(1 BFu0ll_Us_C) C1{ FL:0 Fs Fc}



static void Test_BFu0ll_Us_C()
{
  {
    init_simple_test("BFu0ll_Us_C");
    static STRUCT_IF_C BFu0ll_Us_C lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_C.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_Us_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_C, BFu0ll_Us_C)
//============================================================================


struct  BFu0ll_Us_D  {
  __tsu64  :0;
  unsigned short v1;
  double v2;
};
//SIG(1 BFu0ll_Us_D) C1{ FL:0 Fs FL}



static void Test_BFu0ll_Us_D()
{
  {
    init_simple_test("BFu0ll_Us_D");
    static STRUCT_IF_C BFu0ll_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Us_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_D, BFu0ll_Us_D)
//============================================================================


struct  BFu0ll_Us_F  {
  __tsu64  :0;
  unsigned short v1;
  float v2;
};
//SIG(1 BFu0ll_Us_F) C1{ FL:0 Fs Fi}



static void Test_BFu0ll_Us_F()
{
  {
    init_simple_test("BFu0ll_Us_F");
    static STRUCT_IF_C BFu0ll_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_F.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Us_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_F, BFu0ll_Us_F)
//============================================================================


struct  BFu0ll_Us_I  {
  __tsu64  :0;
  unsigned short v1;
  int v2;
};
//SIG(1 BFu0ll_Us_I) C1{ FL:0 Fs Fi}



static void Test_BFu0ll_Us_I()
{
  {
    init_simple_test("BFu0ll_Us_I");
    static STRUCT_IF_C BFu0ll_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_I.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Us_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_I, BFu0ll_Us_I)
//============================================================================


struct  BFu0ll_Us_Ip  {
  __tsu64  :0;
  unsigned short v1;
  int *v2;
};
//SIG(1 BFu0ll_Us_Ip) C1{ FL:0 Fs Fp}



static void Test_BFu0ll_Us_Ip()
{
  {
    init_simple_test("BFu0ll_Us_Ip");
    static STRUCT_IF_C BFu0ll_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Us_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_Ip, BFu0ll_Us_Ip)
//============================================================================


struct  BFu0ll_Us_L  {
  __tsu64  :0;
  unsigned short v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_Us_L) C1{ FL:0 Fs FL}



static void Test_BFu0ll_Us_L()
{
  {
    init_simple_test("BFu0ll_Us_L");
    static STRUCT_IF_C BFu0ll_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Us_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_L, BFu0ll_Us_L)
//============================================================================


struct  BFu0ll_Us_S  {
  __tsu64  :0;
  unsigned short v1;
  short v2;
};
//SIG(1 BFu0ll_Us_S) C1{ FL:0 Fs[2]}



static void Test_BFu0ll_Us_S()
{
  {
    init_simple_test("BFu0ll_Us_S");
    static STRUCT_IF_C BFu0ll_Us_S lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_S.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_Us_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_S, BFu0ll_Us_S)
//============================================================================


struct  BFu0ll_Us_Uc  {
  __tsu64  :0;
  unsigned short v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_Us_Uc) C1{ FL:0 Fs Fc}



static void Test_BFu0ll_Us_Uc()
{
  {
    init_simple_test("BFu0ll_Us_Uc");
    static STRUCT_IF_C BFu0ll_Us_Uc lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_Uc.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_Us_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_Uc, BFu0ll_Us_Uc)
//============================================================================


struct  BFu0ll_Us_Ui  {
  __tsu64  :0;
  unsigned short v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_Us_Ui) C1{ FL:0 Fs Fi}



static void Test_BFu0ll_Us_Ui()
{
  {
    init_simple_test("BFu0ll_Us_Ui");
    static STRUCT_IF_C BFu0ll_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0ll_Us_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0ll_Us_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_Ui.v1");
    check_field_offset(lv, v2, 4, "BFu0ll_Us_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_Ui, BFu0ll_Us_Ui)
//============================================================================


struct  BFu0ll_Us_Ul  {
  __tsu64  :0;
  unsigned short v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_Us_Ul) C1{ FL:0 Fs FL}



static void Test_BFu0ll_Us_Ul()
{
  {
    init_simple_test("BFu0ll_Us_Ul");
    static STRUCT_IF_C BFu0ll_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Us_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_Ul, BFu0ll_Us_Ul)
//============================================================================


struct  BFu0ll_Us_Us  {
  __tsu64  :0;
  unsigned short v1;
  unsigned short v2;
};
//SIG(1 BFu0ll_Us_Us) C1{ FL:0 Fs[2]}



static void Test_BFu0ll_Us_Us()
{
  {
    init_simple_test("BFu0ll_Us_Us");
    static STRUCT_IF_C BFu0ll_Us_Us lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0ll_Us_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0ll_Us_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_Us.v1");
    check_field_offset(lv, v2, 2, "BFu0ll_Us_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_Us, BFu0ll_Us_Us)
//============================================================================


struct  BFu0ll_Us_Vp  {
  __tsu64  :0;
  unsigned short v1;
  void *v2;
};
//SIG(1 BFu0ll_Us_Vp) C1{ FL:0 Fs Fp}



static void Test_BFu0ll_Us_Vp()
{
  {
    init_simple_test("BFu0ll_Us_Vp");
    static STRUCT_IF_C BFu0ll_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Us_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_Us_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Us_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Us_Vp, BFu0ll_Us_Vp)
//============================================================================


struct  BFu0ll_Vp  {
  __tsu64  :0;
  void *v1;
};
//SIG(1 BFu0ll_Vp) C1{ FL:0 Fp}



static void Test_BFu0ll_Vp()
{
  {
    init_simple_test("BFu0ll_Vp");
    static STRUCT_IF_C BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp, BFu0ll_Vp)
//============================================================================


struct  BFu0ll_Vp_BFu0c  {
  __tsu64  :0;
  void *v1;
  unsigned char  :0;
};
//SIG(1 BFu0ll_Vp_BFu0c) C1{ FL:0 Fp Fc:0}



static void Test_BFu0ll_Vp_BFu0c()
{
  {
    init_simple_test("BFu0ll_Vp_BFu0c");
    static STRUCT_IF_C BFu0ll_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu0c, BFu0ll_Vp_BFu0c)
//============================================================================


struct  BFu0ll_Vp_BFu0i  {
  __tsu64  :0;
  void *v1;
  unsigned int  :0;
};
//SIG(1 BFu0ll_Vp_BFu0i) C1{ FL:0 Fp Fi:0}



static void Test_BFu0ll_Vp_BFu0i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu0i");
    static STRUCT_IF_C BFu0ll_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu0i, BFu0ll_Vp_BFu0i)
//============================================================================


struct  BFu0ll_Vp_BFu0ll  {
  __tsu64  :0;
  void *v1;
  __tsu64  :0;
};
//SIG(1 BFu0ll_Vp_BFu0ll) C1{ FL:0 Fp FL:0}



static void Test_BFu0ll_Vp_BFu0ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu0ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu0ll, BFu0ll_Vp_BFu0ll)
//============================================================================


struct  BFu0ll_Vp_BFu0s  {
  __tsu64  :0;
  void *v1;
  unsigned short  :0;
};
//SIG(1 BFu0ll_Vp_BFu0s) C1{ FL:0 Fp Fs:0}



static void Test_BFu0ll_Vp_BFu0s()
{
  {
    init_simple_test("BFu0ll_Vp_BFu0s");
    static STRUCT_IF_C BFu0ll_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0ll_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu0s, BFu0ll_Vp_BFu0s)
//============================================================================


struct  BFu0ll_Vp_BFu15i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:15;
};
//SIG(1 BFu0ll_Vp_BFu15i) C1{ FL:0 Fp Fi:15}



static void Test_BFu0ll_Vp_BFu15i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu15i");
    static STRUCT_IF_C BFu0ll_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0ll_Vp_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0ll_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu15i, BFu0ll_Vp_BFu15i)
//============================================================================


struct  BFu0ll_Vp_BFu15ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0ll_Vp_BFu15ll) C1{ FL:0 Fp FL:15}



static void Test_BFu0ll_Vp_BFu15ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu15ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0ll_Vp_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0ll_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu15ll, BFu0ll_Vp_BFu15ll)
//============================================================================


struct  BFu0ll_Vp_BFu15s  {
  __tsu64  :0;
  void *v1;
  unsigned short v2:15;
};
//SIG(1 BFu0ll_Vp_BFu15s) C1{ FL:0 Fp Fs:15}



static void Test_BFu0ll_Vp_BFu15s()
{
  {
    init_simple_test("BFu0ll_Vp_BFu15s");
    static STRUCT_IF_C BFu0ll_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu0ll_Vp_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu0ll_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu15s, BFu0ll_Vp_BFu15s)
//============================================================================


struct  BFu0ll_Vp_BFu16i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:16;
};
//SIG(1 BFu0ll_Vp_BFu16i) C1{ FL:0 Fp Fi:16}



static void Test_BFu0ll_Vp_BFu16i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu16i");
    static STRUCT_IF_C BFu0ll_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0ll_Vp_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0ll_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu16i, BFu0ll_Vp_BFu16i)
//============================================================================


struct  BFu0ll_Vp_BFu16ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0ll_Vp_BFu16ll) C1{ FL:0 Fp FL:16}



static void Test_BFu0ll_Vp_BFu16ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu16ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0ll_Vp_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0ll_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu16ll, BFu0ll_Vp_BFu16ll)
//============================================================================


struct  BFu0ll_Vp_BFu16s  {
  __tsu64  :0;
  void *v1;
  unsigned short v2:16;
};
//SIG(1 BFu0ll_Vp_BFu16s) C1{ FL:0 Fp Fs:16}



static void Test_BFu0ll_Vp_BFu16s()
{
  {
    init_simple_test("BFu0ll_Vp_BFu16s");
    static STRUCT_IF_C BFu0ll_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu0ll_Vp_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu0ll_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu16s, BFu0ll_Vp_BFu16s)
//============================================================================


struct  BFu0ll_Vp_BFu17i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:17;
};
//SIG(1 BFu0ll_Vp_BFu17i) C1{ FL:0 Fp Fi:17}



static void Test_BFu0ll_Vp_BFu17i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu17i");
    static STRUCT_IF_C BFu0ll_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu0ll_Vp_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu0ll_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu17i, BFu0ll_Vp_BFu17i)
//============================================================================


struct  BFu0ll_Vp_BFu17ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0ll_Vp_BFu17ll) C1{ FL:0 Fp FL:17}



static void Test_BFu0ll_Vp_BFu17ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu17ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu0ll_Vp_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu0ll_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu17ll, BFu0ll_Vp_BFu17ll)
//============================================================================


struct  BFu0ll_Vp_BFu1c  {
  __tsu64  :0;
  void *v1;
  unsigned char v2:1;
};
//SIG(1 BFu0ll_Vp_BFu1c) C1{ FL:0 Fp Fc:1}



static void Test_BFu0ll_Vp_BFu1c()
{
  {
    init_simple_test("BFu0ll_Vp_BFu1c");
    static STRUCT_IF_C BFu0ll_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0ll_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu1c, BFu0ll_Vp_BFu1c)
//============================================================================


struct  BFu0ll_Vp_BFu1i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:1;
};
//SIG(1 BFu0ll_Vp_BFu1i) C1{ FL:0 Fp Fi:1}



static void Test_BFu0ll_Vp_BFu1i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu1i");
    static STRUCT_IF_C BFu0ll_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0ll_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu1i, BFu0ll_Vp_BFu1i)
//============================================================================


struct  BFu0ll_Vp_BFu1ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0ll_Vp_BFu1ll) C1{ FL:0 Fp FL:1}



static void Test_BFu0ll_Vp_BFu1ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu1ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0ll_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu1ll, BFu0ll_Vp_BFu1ll)
//============================================================================


struct  BFu0ll_Vp_BFu1s  {
  __tsu64  :0;
  void *v1;
  unsigned short v2:1;
};
//SIG(1 BFu0ll_Vp_BFu1s) C1{ FL:0 Fp Fs:1}



static void Test_BFu0ll_Vp_BFu1s()
{
  {
    init_simple_test("BFu0ll_Vp_BFu1s");
    static STRUCT_IF_C BFu0ll_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu0ll_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu1s, BFu0ll_Vp_BFu1s)
//============================================================================


struct  BFu0ll_Vp_BFu31i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:31;
};
//SIG(1 BFu0ll_Vp_BFu31i) C1{ FL:0 Fp Fi:31}



static void Test_BFu0ll_Vp_BFu31i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu31i");
    static STRUCT_IF_C BFu0ll_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu0ll_Vp_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu0ll_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu31i, BFu0ll_Vp_BFu31i)
//============================================================================


struct  BFu0ll_Vp_BFu31ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0ll_Vp_BFu31ll) C1{ FL:0 Fp FL:31}



static void Test_BFu0ll_Vp_BFu31ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu31ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu0ll_Vp_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu0ll_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu31ll, BFu0ll_Vp_BFu31ll)
//============================================================================


struct  BFu0ll_Vp_BFu32i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:32;
};
//SIG(1 BFu0ll_Vp_BFu32i) C1{ FL:0 Fp Fi:32}



static void Test_BFu0ll_Vp_BFu32i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu32i");
    static STRUCT_IF_C BFu0ll_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu0ll_Vp_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu0ll_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu32i, BFu0ll_Vp_BFu32i)
//============================================================================


struct  BFu0ll_Vp_BFu32ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0ll_Vp_BFu32ll) C1{ FL:0 Fp FL:32}



static void Test_BFu0ll_Vp_BFu32ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu32ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu0ll_Vp_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu0ll_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu32ll, BFu0ll_Vp_BFu32ll)
//============================================================================


struct  BFu0ll_Vp_BFu33  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0ll_Vp_BFu33) C1{ FL:0 Fp FL:33}



static void Test_BFu0ll_Vp_BFu33()
{
  {
    init_simple_test("BFu0ll_Vp_BFu33");
    static STRUCT_IF_C BFu0ll_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0ll_Vp_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0ll_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu33, BFu0ll_Vp_BFu33)
//============================================================================


struct  BFu0ll_Vp_BFu7c  {
  __tsu64  :0;
  void *v1;
  unsigned char v2:7;
};
//SIG(1 BFu0ll_Vp_BFu7c) C1{ FL:0 Fp Fc:7}



static void Test_BFu0ll_Vp_BFu7c()
{
  {
    init_simple_test("BFu0ll_Vp_BFu7c");
    static STRUCT_IF_C BFu0ll_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0ll_Vp_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0ll_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu7c, BFu0ll_Vp_BFu7c)
//============================================================================


struct  BFu0ll_Vp_BFu7i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:7;
};
//SIG(1 BFu0ll_Vp_BFu7i) C1{ FL:0 Fp Fi:7}



static void Test_BFu0ll_Vp_BFu7i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu7i");
    static STRUCT_IF_C BFu0ll_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0ll_Vp_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0ll_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu7i, BFu0ll_Vp_BFu7i)
//============================================================================


struct  BFu0ll_Vp_BFu7ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:7;
};
//SIG(1 BFu0ll_Vp_BFu7ll) C1{ FL:0 Fp FL:7}



static void Test_BFu0ll_Vp_BFu7ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu7ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu7ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0ll_Vp_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0ll_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu7ll, BFu0ll_Vp_BFu7ll)
//============================================================================


struct  BFu0ll_Vp_BFu7s  {
  __tsu64  :0;
  void *v1;
  unsigned short v2:7;
};
//SIG(1 BFu0ll_Vp_BFu7s) C1{ FL:0 Fp Fs:7}



static void Test_BFu0ll_Vp_BFu7s()
{
  {
    init_simple_test("BFu0ll_Vp_BFu7s");
    static STRUCT_IF_C BFu0ll_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu7s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu0ll_Vp_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu0ll_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu7s, BFu0ll_Vp_BFu7s)
//============================================================================


struct  BFu0ll_Vp_BFu8c  {
  __tsu64  :0;
  void *v1;
  unsigned char v2:8;
};
//SIG(1 BFu0ll_Vp_BFu8c) C1{ FL:0 Fp Fc:8}



static void Test_BFu0ll_Vp_BFu8c()
{
  {
    init_simple_test("BFu0ll_Vp_BFu8c");
    static STRUCT_IF_C BFu0ll_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu8c)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0ll_Vp_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0ll_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu8c, BFu0ll_Vp_BFu8c)
//============================================================================


struct  BFu0ll_Vp_BFu8i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:8;
};
//SIG(1 BFu0ll_Vp_BFu8i) C1{ FL:0 Fp Fi:8}



static void Test_BFu0ll_Vp_BFu8i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu8i");
    static STRUCT_IF_C BFu0ll_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu8i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0ll_Vp_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0ll_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu8i, BFu0ll_Vp_BFu8i)
//============================================================================


struct  BFu0ll_Vp_BFu8ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:8;
};
//SIG(1 BFu0ll_Vp_BFu8ll) C1{ FL:0 Fp FL:8}



static void Test_BFu0ll_Vp_BFu8ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu8ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu8ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0ll_Vp_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0ll_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu8ll, BFu0ll_Vp_BFu8ll)
//============================================================================


struct  BFu0ll_Vp_BFu8s  {
  __tsu64  :0;
  void *v1;
  unsigned short v2:8;
};
//SIG(1 BFu0ll_Vp_BFu8s) C1{ FL:0 Fp Fs:8}



static void Test_BFu0ll_Vp_BFu8s()
{
  {
    init_simple_test("BFu0ll_Vp_BFu8s");
    static STRUCT_IF_C BFu0ll_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu8s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu0ll_Vp_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu0ll_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu8s, BFu0ll_Vp_BFu8s)
//============================================================================


struct  BFu0ll_Vp_BFu9i  {
  __tsu64  :0;
  void *v1;
  unsigned int v2:9;
};
//SIG(1 BFu0ll_Vp_BFu9i) C1{ FL:0 Fp Fi:9}



static void Test_BFu0ll_Vp_BFu9i()
{
  {
    init_simple_test("BFu0ll_Vp_BFu9i");
    static STRUCT_IF_C BFu0ll_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu9i)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0ll_Vp_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0ll_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu9i, BFu0ll_Vp_BFu9i)
//============================================================================


struct  BFu0ll_Vp_BFu9ll  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2:9;
};
//SIG(1 BFu0ll_Vp_BFu9ll) C1{ FL:0 Fp FL:9}



static void Test_BFu0ll_Vp_BFu9ll()
{
  {
    init_simple_test("BFu0ll_Vp_BFu9ll");
    static STRUCT_IF_C BFu0ll_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu9ll)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0ll_Vp_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0ll_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu9ll, BFu0ll_Vp_BFu9ll)
//============================================================================


struct  BFu0ll_Vp_BFu9s  {
  __tsu64  :0;
  void *v1;
  unsigned short v2:9;
};
//SIG(1 BFu0ll_Vp_BFu9s) C1{ FL:0 Fp Fs:9}



static void Test_BFu0ll_Vp_BFu9s()
{
  {
    init_simple_test("BFu0ll_Vp_BFu9s");
    static STRUCT_IF_C BFu0ll_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_BFu9s)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu0ll_Vp_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu0ll_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_BFu9s, BFu0ll_Vp_BFu9s)
//============================================================================


struct  BFu0ll_Vp_C  {
  __tsu64  :0;
  void *v1;
  char v2;
};
//SIG(1 BFu0ll_Vp_C) C1{ FL:0 Fp Fc}



static void Test_BFu0ll_Vp_C()
{
  {
    init_simple_test("BFu0ll_Vp_C");
    static STRUCT_IF_C BFu0ll_Vp_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_C)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_C, BFu0ll_Vp_C)
//============================================================================


struct  BFu0ll_Vp_D  {
  __tsu64  :0;
  void *v1;
  double v2;
};
//SIG(1 BFu0ll_Vp_D) C1{ FL:0 Fp FL}



static void Test_BFu0ll_Vp_D()
{
  {
    init_simple_test("BFu0ll_Vp_D");
    static STRUCT_IF_C BFu0ll_Vp_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_D)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_D, BFu0ll_Vp_D)
//============================================================================


struct  BFu0ll_Vp_F  {
  __tsu64  :0;
  void *v1;
  float v2;
};
//SIG(1 BFu0ll_Vp_F) C1{ FL:0 Fp Fi}



static void Test_BFu0ll_Vp_F()
{
  {
    init_simple_test("BFu0ll_Vp_F");
    static STRUCT_IF_C BFu0ll_Vp_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_F)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_F, BFu0ll_Vp_F)
//============================================================================


struct  BFu0ll_Vp_I  {
  __tsu64  :0;
  void *v1;
  int v2;
};
//SIG(1 BFu0ll_Vp_I) C1{ FL:0 Fp Fi}



static void Test_BFu0ll_Vp_I()
{
  {
    init_simple_test("BFu0ll_Vp_I");
    static STRUCT_IF_C BFu0ll_Vp_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_I)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_I, BFu0ll_Vp_I)
//============================================================================


struct  BFu0ll_Vp_Ip  {
  __tsu64  :0;
  void *v1;
  int *v2;
};
//SIG(1 BFu0ll_Vp_Ip) C1{ FL:0 Fp[2]}



static void Test_BFu0ll_Vp_Ip()
{
  {
    init_simple_test("BFu0ll_Vp_Ip");
    static STRUCT_IF_C BFu0ll_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_Ip)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_Ip, BFu0ll_Vp_Ip)
//============================================================================


struct  BFu0ll_Vp_L  {
  __tsu64  :0;
  void *v1;
  __tsi64 v2;
};
//SIG(1 BFu0ll_Vp_L) C1{ FL:0 Fp FL}



static void Test_BFu0ll_Vp_L()
{
  {
    init_simple_test("BFu0ll_Vp_L");
    static STRUCT_IF_C BFu0ll_Vp_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_L)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_L, BFu0ll_Vp_L)
//============================================================================


struct  BFu0ll_Vp_S  {
  __tsu64  :0;
  void *v1;
  short v2;
};
//SIG(1 BFu0ll_Vp_S) C1{ FL:0 Fp Fs}



static void Test_BFu0ll_Vp_S()
{
  {
    init_simple_test("BFu0ll_Vp_S");
    static STRUCT_IF_C BFu0ll_Vp_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_S)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_S, BFu0ll_Vp_S)
//============================================================================


struct  BFu0ll_Vp_Uc  {
  __tsu64  :0;
  void *v1;
  unsigned char v2;
};
//SIG(1 BFu0ll_Vp_Uc) C1{ FL:0 Fp Fc}



static void Test_BFu0ll_Vp_Uc()
{
  {
    init_simple_test("BFu0ll_Vp_Uc");
    static STRUCT_IF_C BFu0ll_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_Uc)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_Uc, BFu0ll_Vp_Uc)
//============================================================================


struct  BFu0ll_Vp_Ui  {
  __tsu64  :0;
  void *v1;
  unsigned int v2;
};
//SIG(1 BFu0ll_Vp_Ui) C1{ FL:0 Fp Fi}



static void Test_BFu0ll_Vp_Ui()
{
  {
    init_simple_test("BFu0ll_Vp_Ui");
    static STRUCT_IF_C BFu0ll_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_Ui)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_Ui, BFu0ll_Vp_Ui)
//============================================================================


struct  BFu0ll_Vp_Ul  {
  __tsu64  :0;
  void *v1;
  __tsu64 v2;
};
//SIG(1 BFu0ll_Vp_Ul) C1{ FL:0 Fp FL}



static void Test_BFu0ll_Vp_Ul()
{
  {
    init_simple_test("BFu0ll_Vp_Ul");
    static STRUCT_IF_C BFu0ll_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0ll_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_Ul)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_Ul, BFu0ll_Vp_Ul)
//============================================================================


struct  BFu0ll_Vp_Us  {
  __tsu64  :0;
  void *v1;
  unsigned short v2;
};
//SIG(1 BFu0ll_Vp_Us) C1{ FL:0 Fp Fs}



static void Test_BFu0ll_Vp_Us()
{
  {
    init_simple_test("BFu0ll_Vp_Us");
    static STRUCT_IF_C BFu0ll_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_Us)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_Us, BFu0ll_Vp_Us)
//============================================================================


struct  BFu0ll_Vp_Vp  {
  __tsu64  :0;
  void *v1;
  void *v2;
};
//SIG(1 BFu0ll_Vp_Vp) C1{ FL:0 Fp[2]}



static void Test_BFu0ll_Vp_Vp()
{
  {
    init_simple_test("BFu0ll_Vp_Vp");
    static STRUCT_IF_C BFu0ll_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0ll_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0ll_Vp_Vp)");
    check_field_offset(lv, v1, 0, "BFu0ll_Vp_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0ll_Vp_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0ll_Vp_Vp, BFu0ll_Vp_Vp)
//============================================================================


struct  BFu0s  {
  unsigned short  :0;
};
//SIG(1 BFu0s) C1{ Fs:0}



static void Test_BFu0s()
{
  {
    init_simple_test("BFu0s");
    static STRUCT_IF_C BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s, BFu0s)
//============================================================================


struct  BFu0s_BFs0c  {
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c) C1{ Fs:0 Fc:0}



static void Test_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c, BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c) C1{ Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c, BFu0s_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0c_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c_BFs0c) C1{ Fs:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c_BFs0c, BFu0s_BFs0c_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0c_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c_BFs0i) C1{ Fs:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c_BFs0i, BFu0s_BFs0c_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0c_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c_BFs0ll) C1{ Fs:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c_BFs0ll, BFu0s_BFs0c_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0c_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c_BFs0s) C1{ Fs:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c_BFs0s, BFu0s_BFs0c_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFs0c_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c_BFu0c) C1{ Fs:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c_BFu0c, BFu0s_BFs0c_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0c_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c_BFu0i) C1{ Fs:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c_BFu0i, BFu0s_BFs0c_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0c_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c_BFu0ll) C1{ Fs:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c_BFu0ll, BFu0s_BFs0c_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0c_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0c_BFu0s) C1{ Fs:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0c_BFu0s, BFu0s_BFs0c_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0c_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i) C1{ Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i, BFu0s_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0i_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i_BFs0c) C1{ Fs:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i_BFs0c, BFu0s_BFs0c_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0i_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i_BFs0i) C1{ Fs:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i_BFs0i, BFu0s_BFs0c_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0i_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i_BFs0ll) C1{ Fs:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i_BFs0ll, BFu0s_BFs0c_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0i_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i_BFs0s) C1{ Fs:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i_BFs0s, BFu0s_BFs0c_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFs0i_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i_BFu0c) C1{ Fs:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i_BFu0c, BFu0s_BFs0c_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0i_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i_BFu0i) C1{ Fs:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i_BFu0i, BFu0s_BFs0c_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0i_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i_BFu0ll) C1{ Fs:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i_BFu0ll, BFu0s_BFs0c_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0i_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0i_BFu0s) C1{ Fs:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0i_BFu0s, BFu0s_BFs0c_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll) C1{ Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll, BFu0s_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll_BFs0c) C1{ Fs:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll_BFs0c, BFu0s_BFs0c_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll_BFs0i) C1{ Fs:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll_BFs0i, BFu0s_BFs0c_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll_BFs0ll) C1{ Fs:0 Fc:0 FL:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll_BFs0ll, BFu0s_BFs0c_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll_BFs0s) C1{ Fs:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll_BFs0s, BFu0s_BFs0c_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll_BFu0c) C1{ Fs:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll_BFu0c, BFu0s_BFs0c_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll_BFu0i) C1{ Fs:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll_BFu0i, BFu0s_BFs0c_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll_BFu0ll) C1{ Fs:0 Fc:0 FL:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll_BFu0ll, BFu0s_BFs0c_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0ll_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0ll_BFu0s) C1{ Fs:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0ll_BFu0s, BFu0s_BFs0c_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0c_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s) C1{ Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s, BFu0s_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFs0s_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s_BFs0c) C1{ Fs:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s_BFs0c, BFu0s_BFs0c_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0s_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s_BFs0i) C1{ Fs:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s_BFs0i, BFu0s_BFs0c_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0s_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s_BFs0ll) C1{ Fs:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s_BFs0ll, BFu0s_BFs0c_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0s_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s_BFs0s) C1{ Fs:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s_BFs0s, BFu0s_BFs0c_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFs0s_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s_BFu0c) C1{ Fs:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0c_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s_BFu0c, BFu0s_BFs0c_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFs0s_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s_BFu0i) C1{ Fs:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0c_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s_BFu0i, BFu0s_BFs0c_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFs0s_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s_BFu0ll) C1{ Fs:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0c_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s_BFu0ll, BFu0s_BFs0c_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFs0s_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFs0s_BFu0s) C1{ Fs:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0c_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFs0s_BFu0s, BFu0s_BFs0c_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c) C1{ Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c, BFu0s_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0c_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c_BFs0c) C1{ Fs:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c_BFs0c, BFu0s_BFs0c_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0c_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c_BFs0i) C1{ Fs:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c_BFs0i, BFu0s_BFs0c_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0c_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c_BFs0ll) C1{ Fs:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c_BFs0ll, BFu0s_BFs0c_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0c_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c_BFs0s) C1{ Fs:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c_BFs0s, BFu0s_BFs0c_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0c_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c_BFu0c) C1{ Fs:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c_BFu0c, BFu0s_BFs0c_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0c_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c_BFu0i) C1{ Fs:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c_BFu0i, BFu0s_BFs0c_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0c_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c_BFu0ll) C1{ Fs:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c_BFu0ll, BFu0s_BFs0c_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0c_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0c_BFu0s) C1{ Fs:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0c_BFu0s, BFu0s_BFs0c_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i) C1{ Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i, BFu0s_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0i_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i_BFs0c) C1{ Fs:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i_BFs0c, BFu0s_BFs0c_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0i_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i_BFs0i) C1{ Fs:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i_BFs0i, BFu0s_BFs0c_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0i_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i_BFs0ll) C1{ Fs:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i_BFs0ll, BFu0s_BFs0c_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0i_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i_BFs0s) C1{ Fs:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i_BFs0s, BFu0s_BFs0c_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0i_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i_BFu0c) C1{ Fs:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i_BFu0c, BFu0s_BFs0c_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0i_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i_BFu0i) C1{ Fs:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i_BFu0i, BFu0s_BFs0c_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0i_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i_BFu0ll) C1{ Fs:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i_BFu0ll, BFu0s_BFs0c_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0i_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0i_BFu0s) C1{ Fs:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0i_BFu0s, BFu0s_BFs0c_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll) C1{ Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll, BFu0s_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll_BFs0c) C1{ Fs:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll_BFs0c, BFu0s_BFs0c_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll_BFs0i) C1{ Fs:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll_BFs0i, BFu0s_BFs0c_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll_BFs0ll) C1{ Fs:0 Fc:0 FL:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll_BFs0ll, BFu0s_BFs0c_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll_BFs0s) C1{ Fs:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll_BFs0s, BFu0s_BFs0c_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll_BFu0c) C1{ Fs:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll_BFu0c, BFu0s_BFs0c_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll_BFu0i) C1{ Fs:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll_BFu0i, BFu0s_BFs0c_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll_BFu0ll) C1{ Fs:0 Fc:0 FL:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll_BFu0ll, BFu0s_BFs0c_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0ll_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0ll_BFu0s) C1{ Fs:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0ll_BFu0s, BFu0s_BFs0c_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s) C1{ Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s, BFu0s_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0s_BFs0c  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s_BFs0c) C1{ Fs:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s_BFs0c, BFu0s_BFs0c_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0s_BFs0i  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s_BFs0i) C1{ Fs:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s_BFs0i, BFu0s_BFs0c_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0s_BFs0ll  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s_BFs0ll) C1{ Fs:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s_BFs0ll, BFu0s_BFs0c_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0s_BFs0s  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s_BFs0s) C1{ Fs:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s_BFs0s, BFu0s_BFs0c_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0c_BFu0s_BFu0c  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s_BFu0c) C1{ Fs:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0c_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s_BFu0c, BFu0s_BFs0c_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0c_BFu0s_BFu0i  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s_BFu0i) C1{ Fs:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0c_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s_BFu0i, BFu0s_BFs0c_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0c_BFu0s_BFu0ll  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s_BFu0ll) C1{ Fs:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0c_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s_BFu0ll, BFu0s_BFs0c_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0c_BFu0s_BFu0s  {
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0c_BFu0s_BFu0s) C1{ Fs:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0c_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0c_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0c_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0c_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0c_BFu0s_BFu0s, BFu0s_BFs0c_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFs0i  {
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i) C1{ Fs:0 Fi:0}



static void Test_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i, BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c) C1{ Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c, BFu0s_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0c_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c_BFs0c) C1{ Fs:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c_BFs0c, BFu0s_BFs0i_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0c_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c_BFs0i) C1{ Fs:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c_BFs0i, BFu0s_BFs0i_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0c_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c_BFs0ll) C1{ Fs:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c_BFs0ll, BFu0s_BFs0i_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0c_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c_BFs0s) C1{ Fs:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c_BFs0s, BFu0s_BFs0i_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFs0c_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c_BFu0c) C1{ Fs:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c_BFu0c, BFu0s_BFs0i_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0c_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c_BFu0i) C1{ Fs:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c_BFu0i, BFu0s_BFs0i_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0c_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c_BFu0ll) C1{ Fs:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c_BFu0ll, BFu0s_BFs0i_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0c_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0c_BFu0s) C1{ Fs:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0c_BFu0s, BFu0s_BFs0i_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0i_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i) C1{ Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i, BFu0s_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0i_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i_BFs0c) C1{ Fs:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i_BFs0c, BFu0s_BFs0i_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0i_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i_BFs0i) C1{ Fs:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i_BFs0i, BFu0s_BFs0i_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0i_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i_BFs0ll) C1{ Fs:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i_BFs0ll, BFu0s_BFs0i_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0i_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i_BFs0s) C1{ Fs:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i_BFs0s, BFu0s_BFs0i_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFs0i_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i_BFu0c) C1{ Fs:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i_BFu0c, BFu0s_BFs0i_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0i_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i_BFu0i) C1{ Fs:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i_BFu0i, BFu0s_BFs0i_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0i_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i_BFu0ll) C1{ Fs:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i_BFu0ll, BFu0s_BFs0i_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0i_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0i_BFu0s) C1{ Fs:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0i_BFu0s, BFu0s_BFs0i_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll) C1{ Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll, BFu0s_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll_BFs0c) C1{ Fs:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll_BFs0c, BFu0s_BFs0i_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll_BFs0i) C1{ Fs:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll_BFs0i, BFu0s_BFs0i_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll_BFs0ll) C1{ Fs:0 Fi:0 FL:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll_BFs0ll, BFu0s_BFs0i_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll_BFs0s) C1{ Fs:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll_BFs0s, BFu0s_BFs0i_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll_BFu0c) C1{ Fs:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll_BFu0c, BFu0s_BFs0i_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll_BFu0i) C1{ Fs:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll_BFu0i, BFu0s_BFs0i_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll_BFu0ll) C1{ Fs:0 Fi:0 FL:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll_BFu0ll, BFu0s_BFs0i_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0ll_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0ll_BFu0s) C1{ Fs:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0ll_BFu0s, BFu0s_BFs0i_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0i_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s) C1{ Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s, BFu0s_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFs0s_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s_BFs0c) C1{ Fs:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s_BFs0c, BFu0s_BFs0i_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0s_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s_BFs0i) C1{ Fs:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s_BFs0i, BFu0s_BFs0i_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0s_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s_BFs0ll) C1{ Fs:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s_BFs0ll, BFu0s_BFs0i_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0s_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s_BFs0s) C1{ Fs:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s_BFs0s, BFu0s_BFs0i_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFs0s_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s_BFu0c) C1{ Fs:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0i_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s_BFu0c, BFu0s_BFs0i_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFs0s_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s_BFu0i) C1{ Fs:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0i_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s_BFu0i, BFu0s_BFs0i_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFs0s_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s_BFu0ll) C1{ Fs:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0i_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s_BFu0ll, BFu0s_BFs0i_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFs0s_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFs0s_BFu0s) C1{ Fs:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0i_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFs0s_BFu0s, BFu0s_BFs0i_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c) C1{ Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c, BFu0s_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0c_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c_BFs0c) C1{ Fs:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c_BFs0c, BFu0s_BFs0i_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0c_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c_BFs0i) C1{ Fs:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c_BFs0i, BFu0s_BFs0i_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0c_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c_BFs0ll) C1{ Fs:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c_BFs0ll, BFu0s_BFs0i_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0c_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c_BFs0s) C1{ Fs:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c_BFs0s, BFu0s_BFs0i_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0c_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c_BFu0c) C1{ Fs:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c_BFu0c, BFu0s_BFs0i_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0c_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c_BFu0i) C1{ Fs:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c_BFu0i, BFu0s_BFs0i_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0c_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c_BFu0ll) C1{ Fs:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c_BFu0ll, BFu0s_BFs0i_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0c_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0c_BFu0s) C1{ Fs:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0c_BFu0s, BFu0s_BFs0i_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i) C1{ Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i, BFu0s_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0i_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i_BFs0c) C1{ Fs:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i_BFs0c, BFu0s_BFs0i_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0i_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i_BFs0i) C1{ Fs:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i_BFs0i, BFu0s_BFs0i_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0i_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i_BFs0ll) C1{ Fs:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i_BFs0ll, BFu0s_BFs0i_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0i_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i_BFs0s) C1{ Fs:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i_BFs0s, BFu0s_BFs0i_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0i_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i_BFu0c) C1{ Fs:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i_BFu0c, BFu0s_BFs0i_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0i_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i_BFu0i) C1{ Fs:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i_BFu0i, BFu0s_BFs0i_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0i_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i_BFu0ll) C1{ Fs:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i_BFu0ll, BFu0s_BFs0i_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0i_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0i_BFu0s) C1{ Fs:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0i_BFu0s, BFu0s_BFs0i_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll) C1{ Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll, BFu0s_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll_BFs0c) C1{ Fs:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll_BFs0c, BFu0s_BFs0i_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll_BFs0i) C1{ Fs:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll_BFs0i, BFu0s_BFs0i_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll_BFs0ll) C1{ Fs:0 Fi:0 FL:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll_BFs0ll, BFu0s_BFs0i_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll_BFs0s) C1{ Fs:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll_BFs0s, BFu0s_BFs0i_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll_BFu0c) C1{ Fs:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll_BFu0c, BFu0s_BFs0i_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll_BFu0i) C1{ Fs:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll_BFu0i, BFu0s_BFs0i_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll_BFu0ll) C1{ Fs:0 Fi:0 FL:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll_BFu0ll, BFu0s_BFs0i_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0ll_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0ll_BFu0s) C1{ Fs:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0ll_BFu0s, BFu0s_BFs0i_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s) C1{ Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s, BFu0s_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0s_BFs0c  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s_BFs0c) C1{ Fs:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s_BFs0c, BFu0s_BFs0i_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0s_BFs0i  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s_BFs0i) C1{ Fs:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s_BFs0i, BFu0s_BFs0i_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0s_BFs0ll  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s_BFs0ll) C1{ Fs:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s_BFs0ll, BFu0s_BFs0i_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0s_BFs0s  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s_BFs0s) C1{ Fs:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s_BFs0s, BFu0s_BFs0i_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0i_BFu0s_BFu0c  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s_BFu0c) C1{ Fs:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0i_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s_BFu0c, BFu0s_BFs0i_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0i_BFu0s_BFu0i  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s_BFu0i) C1{ Fs:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0i_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s_BFu0i, BFu0s_BFs0i_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0i_BFu0s_BFu0ll  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s_BFu0ll) C1{ Fs:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0i_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s_BFu0ll, BFu0s_BFs0i_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0i_BFu0s_BFu0s  {
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0i_BFu0s_BFu0s) C1{ Fs:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0i_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0i_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0i_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0i_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0i_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0i_BFu0s_BFu0s, BFu0s_BFs0i_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll) C1{ Fs:0 FL:0}



static void Test_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll, BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c) C1{ Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c, BFu0s_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c_BFs0c) C1{ Fs:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c_BFs0c, BFu0s_BFs0ll_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c_BFs0i) C1{ Fs:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c_BFs0i, BFu0s_BFs0ll_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c_BFs0ll) C1{ Fs:0 FL:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c_BFs0ll, BFu0s_BFs0ll_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c_BFs0s) C1{ Fs:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c_BFs0s, BFu0s_BFs0ll_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c_BFu0c) C1{ Fs:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c_BFu0c, BFu0s_BFs0ll_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c_BFu0i) C1{ Fs:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c_BFu0i, BFu0s_BFs0ll_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c_BFu0ll) C1{ Fs:0 FL:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c_BFu0ll, BFu0s_BFs0ll_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0c_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0c_BFu0s) C1{ Fs:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0c_BFu0s, BFu0s_BFs0ll_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i) C1{ Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i, BFu0s_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i_BFs0c) C1{ Fs:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i_BFs0c, BFu0s_BFs0ll_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i_BFs0i) C1{ Fs:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i_BFs0i, BFu0s_BFs0ll_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i_BFs0ll) C1{ Fs:0 FL:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i_BFs0ll, BFu0s_BFs0ll_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i_BFs0s) C1{ Fs:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i_BFs0s, BFu0s_BFs0ll_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i_BFu0c) C1{ Fs:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i_BFu0c, BFu0s_BFs0ll_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i_BFu0i) C1{ Fs:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i_BFu0i, BFu0s_BFs0ll_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i_BFu0ll) C1{ Fs:0 FL:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i_BFu0ll, BFu0s_BFs0ll_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0i_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0i_BFu0s) C1{ Fs:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0i_BFu0s, BFu0s_BFs0ll_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll) C1{ Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll, BFu0s_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll_BFs0c) C1{ Fs:0 FL:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll_BFs0c, BFu0s_BFs0ll_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll_BFs0i) C1{ Fs:0 FL:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll_BFs0i, BFu0s_BFs0ll_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll_BFs0ll) C1{ Fs:0 FL:0 FL:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll_BFs0ll, BFu0s_BFs0ll_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll_BFs0s) C1{ Fs:0 FL:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll_BFs0s, BFu0s_BFs0ll_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll_BFu0c) C1{ Fs:0 FL:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll_BFu0c, BFu0s_BFs0ll_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll_BFu0i) C1{ Fs:0 FL:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll_BFu0i, BFu0s_BFs0ll_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll_BFu0ll) C1{ Fs:0 FL:0 FL:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll_BFu0ll, BFu0s_BFs0ll_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0ll_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0ll_BFu0s) C1{ Fs:0 FL:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0ll_BFu0s, BFu0s_BFs0ll_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s) C1{ Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s, BFu0s_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s_BFs0c) C1{ Fs:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s_BFs0c, BFu0s_BFs0ll_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s_BFs0i) C1{ Fs:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s_BFs0i, BFu0s_BFs0ll_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s_BFs0ll) C1{ Fs:0 FL:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s_BFs0ll, BFu0s_BFs0ll_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s_BFs0s) C1{ Fs:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s_BFs0s, BFu0s_BFs0ll_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s_BFu0c) C1{ Fs:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s_BFu0c, BFu0s_BFs0ll_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s_BFu0i) C1{ Fs:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s_BFu0i, BFu0s_BFs0ll_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s_BFu0ll) C1{ Fs:0 FL:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0ll_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s_BFu0ll, BFu0s_BFs0ll_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFs0s_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFs0s_BFu0s) C1{ Fs:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFs0s_BFu0s, BFu0s_BFs0ll_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c) C1{ Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c, BFu0s_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c_BFs0c) C1{ Fs:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c_BFs0c, BFu0s_BFs0ll_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c_BFs0i) C1{ Fs:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c_BFs0i, BFu0s_BFs0ll_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c_BFs0ll) C1{ Fs:0 FL:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c_BFs0ll, BFu0s_BFs0ll_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c_BFs0s) C1{ Fs:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c_BFs0s, BFu0s_BFs0ll_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c_BFu0c) C1{ Fs:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c_BFu0c, BFu0s_BFs0ll_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c_BFu0i) C1{ Fs:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c_BFu0i, BFu0s_BFs0ll_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c_BFu0ll) C1{ Fs:0 FL:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c_BFu0ll, BFu0s_BFs0ll_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0c_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0c_BFu0s) C1{ Fs:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0c_BFu0s, BFu0s_BFs0ll_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i) C1{ Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i, BFu0s_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i_BFs0c) C1{ Fs:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i_BFs0c, BFu0s_BFs0ll_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i_BFs0i) C1{ Fs:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i_BFs0i, BFu0s_BFs0ll_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i_BFs0ll) C1{ Fs:0 FL:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i_BFs0ll, BFu0s_BFs0ll_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i_BFs0s) C1{ Fs:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i_BFs0s, BFu0s_BFs0ll_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i_BFu0c) C1{ Fs:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i_BFu0c, BFu0s_BFs0ll_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i_BFu0i) C1{ Fs:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i_BFu0i, BFu0s_BFs0ll_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i_BFu0ll) C1{ Fs:0 FL:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i_BFu0ll, BFu0s_BFs0ll_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0i_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0i_BFu0s) C1{ Fs:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0i_BFu0s, BFu0s_BFs0ll_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll) C1{ Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll, BFu0s_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll_BFs0c) C1{ Fs:0 FL:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll_BFs0c, BFu0s_BFs0ll_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll_BFs0i) C1{ Fs:0 FL:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll_BFs0i, BFu0s_BFs0ll_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll_BFs0ll) C1{ Fs:0 FL:0 FL:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll_BFs0ll, BFu0s_BFs0ll_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll_BFs0s) C1{ Fs:0 FL:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll_BFs0s, BFu0s_BFs0ll_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll_BFu0c) C1{ Fs:0 FL:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll_BFu0c, BFu0s_BFs0ll_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll_BFu0i) C1{ Fs:0 FL:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll_BFu0i, BFu0s_BFs0ll_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll_BFu0ll) C1{ Fs:0 FL:0 FL:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll_BFu0ll, BFu0s_BFs0ll_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0ll_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0ll_BFu0s) C1{ Fs:0 FL:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0ll_BFu0s, BFu0s_BFs0ll_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s) C1{ Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s, BFu0s_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s_BFs0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s_BFs0c) C1{ Fs:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s_BFs0c, BFu0s_BFs0ll_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s_BFs0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s_BFs0i) C1{ Fs:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s_BFs0i, BFu0s_BFs0ll_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s_BFs0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s_BFs0ll) C1{ Fs:0 FL:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s_BFs0ll, BFu0s_BFs0ll_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s_BFs0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s_BFs0s) C1{ Fs:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s_BFs0s, BFu0s_BFs0ll_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s_BFu0c  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s_BFu0c) C1{ Fs:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0ll_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s_BFu0c, BFu0s_BFs0ll_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s_BFu0i  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s_BFu0i) C1{ Fs:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0ll_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s_BFu0i, BFu0s_BFs0ll_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s_BFu0ll  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s_BFu0ll) C1{ Fs:0 FL:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0ll_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s_BFu0ll, BFu0s_BFs0ll_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0ll_BFu0s_BFu0s  {
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0ll_BFu0s_BFu0s) C1{ Fs:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0ll_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0ll_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0ll_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0ll_BFu0s_BFu0s, BFu0s_BFs0ll_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFs0s  {
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s) C1{ Fs:0 Fs:0}



static void Test_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s, BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c) C1{ Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c, BFu0s_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0c_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c_BFs0c) C1{ Fs:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c_BFs0c, BFu0s_BFs0s_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0c_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c_BFs0i) C1{ Fs:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c_BFs0i, BFu0s_BFs0s_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0c_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c_BFs0ll) C1{ Fs:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c_BFs0ll, BFu0s_BFs0s_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0c_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c_BFs0s) C1{ Fs:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c_BFs0s, BFu0s_BFs0s_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0c_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c_BFu0c) C1{ Fs:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c_BFu0c, BFu0s_BFs0s_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0c_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c_BFu0i) C1{ Fs:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c_BFu0i, BFu0s_BFs0s_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0c_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c_BFu0ll) C1{ Fs:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c_BFu0ll, BFu0s_BFs0s_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0c_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0c_BFu0s) C1{ Fs:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0c_BFu0s, BFu0s_BFs0s_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i) C1{ Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i, BFu0s_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0i_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i_BFs0c) C1{ Fs:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i_BFs0c, BFu0s_BFs0s_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0i_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i_BFs0i) C1{ Fs:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i_BFs0i, BFu0s_BFs0s_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0i_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i_BFs0ll) C1{ Fs:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i_BFs0ll, BFu0s_BFs0s_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0i_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i_BFs0s) C1{ Fs:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i_BFs0s, BFu0s_BFs0s_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0i_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i_BFu0c) C1{ Fs:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i_BFu0c, BFu0s_BFs0s_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0i_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i_BFu0i) C1{ Fs:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i_BFu0i, BFu0s_BFs0s_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0i_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i_BFu0ll) C1{ Fs:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i_BFu0ll, BFu0s_BFs0s_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0i_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0i_BFu0s) C1{ Fs:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0i_BFu0s, BFu0s_BFs0s_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll) C1{ Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll, BFu0s_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll_BFs0c) C1{ Fs:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll_BFs0c, BFu0s_BFs0s_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll_BFs0i) C1{ Fs:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll_BFs0i, BFu0s_BFs0s_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll_BFs0ll) C1{ Fs:0 Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll_BFs0ll, BFu0s_BFs0s_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll_BFs0s) C1{ Fs:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll_BFs0s, BFu0s_BFs0s_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll_BFu0c) C1{ Fs:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll_BFu0c, BFu0s_BFs0s_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll_BFu0i) C1{ Fs:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll_BFu0i, BFu0s_BFs0s_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll_BFu0ll) C1{ Fs:0 Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll_BFu0ll, BFu0s_BFs0s_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0ll_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0ll_BFu0s) C1{ Fs:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0ll_BFu0s, BFu0s_BFs0s_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s) C1{ Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s, BFu0s_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0s_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s_BFs0c) C1{ Fs:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s_BFs0c, BFu0s_BFs0s_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0s_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s_BFs0i) C1{ Fs:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s_BFs0i, BFu0s_BFs0s_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0s_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s_BFs0ll) C1{ Fs:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s_BFs0ll, BFu0s_BFs0s_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0s_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s_BFs0s) C1{ Fs:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s_BFs0s, BFu0s_BFs0s_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFs0s_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s_BFu0c) C1{ Fs:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0s_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s_BFu0c, BFu0s_BFs0s_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFs0s_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s_BFu0i) C1{ Fs:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0s_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s_BFu0i, BFu0s_BFs0s_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFs0s_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s_BFu0ll) C1{ Fs:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0s_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s_BFu0ll, BFu0s_BFs0s_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFs0s_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFs0s_BFu0s) C1{ Fs:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0s_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFs0s_BFu0s, BFu0s_BFs0s_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c) C1{ Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c, BFu0s_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0c_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c_BFs0c) C1{ Fs:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c_BFs0c, BFu0s_BFs0s_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0c_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c_BFs0i) C1{ Fs:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c_BFs0i, BFu0s_BFs0s_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0c_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c_BFs0ll) C1{ Fs:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c_BFs0ll, BFu0s_BFs0s_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0c_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c_BFs0s) C1{ Fs:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c_BFs0s, BFu0s_BFs0s_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0c_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c_BFu0c) C1{ Fs:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c_BFu0c, BFu0s_BFs0s_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0c_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c_BFu0i) C1{ Fs:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c_BFu0i, BFu0s_BFs0s_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0c_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c_BFu0ll) C1{ Fs:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c_BFu0ll, BFu0s_BFs0s_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0c_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0c_BFu0s) C1{ Fs:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0c_BFu0s, BFu0s_BFs0s_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i) C1{ Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i, BFu0s_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0i_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i_BFs0c) C1{ Fs:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i_BFs0c, BFu0s_BFs0s_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0i_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i_BFs0i) C1{ Fs:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i_BFs0i, BFu0s_BFs0s_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0i_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i_BFs0ll) C1{ Fs:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i_BFs0ll, BFu0s_BFs0s_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0i_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i_BFs0s) C1{ Fs:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i_BFs0s, BFu0s_BFs0s_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0i_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i_BFu0c) C1{ Fs:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i_BFu0c, BFu0s_BFs0s_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0i_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i_BFu0i) C1{ Fs:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i_BFu0i, BFu0s_BFs0s_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0i_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i_BFu0ll) C1{ Fs:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i_BFu0ll, BFu0s_BFs0s_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0i_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0i_BFu0s) C1{ Fs:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0i_BFu0s, BFu0s_BFs0s_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll) C1{ Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll, BFu0s_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll_BFs0c) C1{ Fs:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll_BFs0c, BFu0s_BFs0s_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll_BFs0i) C1{ Fs:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll_BFs0i, BFu0s_BFs0s_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll_BFs0ll) C1{ Fs:0 Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll_BFs0ll, BFu0s_BFs0s_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll_BFs0s) C1{ Fs:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll_BFs0s, BFu0s_BFs0s_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll_BFu0c) C1{ Fs:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll_BFu0c, BFu0s_BFs0s_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll_BFu0i) C1{ Fs:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll_BFu0i, BFu0s_BFs0s_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll_BFu0ll) C1{ Fs:0 Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll_BFu0ll, BFu0s_BFs0s_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0ll_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0ll_BFu0s) C1{ Fs:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0ll_BFu0s, BFu0s_BFs0s_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s) C1{ Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s, BFu0s_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0s_BFs0c  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s_BFs0c) C1{ Fs:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s_BFs0c, BFu0s_BFs0s_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0s_BFs0i  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s_BFs0i) C1{ Fs:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s_BFs0i, BFu0s_BFs0s_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0s_BFs0ll  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s_BFs0ll) C1{ Fs:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s_BFs0ll, BFu0s_BFs0s_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0s_BFs0s  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s_BFs0s) C1{ Fs:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s_BFs0s, BFu0s_BFs0s_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFs0s_BFu0s_BFu0c  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s_BFu0c) C1{ Fs:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFs0s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s_BFu0c, BFu0s_BFs0s_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFs0s_BFu0s_BFu0i  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s_BFu0i) C1{ Fs:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFs0s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s_BFu0i, BFu0s_BFs0s_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFs0s_BFu0s_BFu0ll  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s_BFu0ll) C1{ Fs:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFs0s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s_BFu0ll, BFu0s_BFs0s_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFs0s_BFu0s_BFu0s  {
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFs0s_BFu0s_BFu0s) C1{ Fs:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFs0s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFs0s_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFs0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFs0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFs0s_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFs0s_BFu0s_BFu0s, BFu0s_BFs0s_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c) C1{ Fs:0 Fc:0}



static void Test_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c, BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c) C1{ Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c, BFu0s_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0c_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c_BFs0c) C1{ Fs:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c_BFs0c, BFu0s_BFu0c_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0c_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c_BFs0i) C1{ Fs:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c_BFs0i, BFu0s_BFu0c_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0c_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c_BFs0ll) C1{ Fs:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c_BFs0ll, BFu0s_BFu0c_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0c_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c_BFs0s) C1{ Fs:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c_BFs0s, BFu0s_BFu0c_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFs0c_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c_BFu0c) C1{ Fs:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c_BFu0c, BFu0s_BFu0c_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0c_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c_BFu0i) C1{ Fs:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c_BFu0i, BFu0s_BFu0c_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0c_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c_BFu0ll) C1{ Fs:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c_BFu0ll, BFu0s_BFu0c_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0c_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0c_BFu0s) C1{ Fs:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0c_BFu0s, BFu0s_BFu0c_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i) C1{ Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i, BFu0s_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0i_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i_BFs0c) C1{ Fs:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i_BFs0c, BFu0s_BFu0c_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0i_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i_BFs0i) C1{ Fs:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i_BFs0i, BFu0s_BFu0c_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0i_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i_BFs0ll) C1{ Fs:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i_BFs0ll, BFu0s_BFu0c_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0i_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i_BFs0s) C1{ Fs:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i_BFs0s, BFu0s_BFu0c_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFs0i_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i_BFu0c) C1{ Fs:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i_BFu0c, BFu0s_BFu0c_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0i_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i_BFu0i) C1{ Fs:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i_BFu0i, BFu0s_BFu0c_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0i_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i_BFu0ll) C1{ Fs:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i_BFu0ll, BFu0s_BFu0c_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0i_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0i_BFu0s) C1{ Fs:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0i_BFu0s, BFu0s_BFu0c_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll) C1{ Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll, BFu0s_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll_BFs0c) C1{ Fs:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll_BFs0c, BFu0s_BFu0c_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll_BFs0i) C1{ Fs:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll_BFs0i, BFu0s_BFu0c_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll_BFs0ll) C1{ Fs:0 Fc:0 FL:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll_BFs0ll, BFu0s_BFu0c_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll_BFs0s) C1{ Fs:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll_BFs0s, BFu0s_BFu0c_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll_BFu0c) C1{ Fs:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll_BFu0c, BFu0s_BFu0c_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll_BFu0i) C1{ Fs:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll_BFu0i, BFu0s_BFu0c_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll_BFu0ll) C1{ Fs:0 Fc:0 FL:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll_BFu0ll, BFu0s_BFu0c_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0ll_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0ll_BFu0s) C1{ Fs:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0ll_BFu0s, BFu0s_BFu0c_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s) C1{ Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s, BFu0s_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFs0s_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s_BFs0c) C1{ Fs:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s_BFs0c, BFu0s_BFu0c_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0s_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s_BFs0i) C1{ Fs:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s_BFs0i, BFu0s_BFu0c_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0s_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s_BFs0ll) C1{ Fs:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s_BFs0ll, BFu0s_BFu0c_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0s_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s_BFs0s) C1{ Fs:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s_BFs0s, BFu0s_BFu0c_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFs0s_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s_BFu0c) C1{ Fs:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0c_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s_BFu0c, BFu0s_BFu0c_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFs0s_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s_BFu0i) C1{ Fs:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0c_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s_BFu0i, BFu0s_BFu0c_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFs0s_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s_BFu0ll) C1{ Fs:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0c_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s_BFu0ll, BFu0s_BFu0c_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFs0s_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFs0s_BFu0s) C1{ Fs:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0c_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFs0s_BFu0s, BFu0s_BFu0c_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c) C1{ Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c, BFu0s_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0c_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c_BFs0c) C1{ Fs:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c_BFs0c, BFu0s_BFu0c_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0c_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c_BFs0i) C1{ Fs:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c_BFs0i, BFu0s_BFu0c_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0c_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c_BFs0ll) C1{ Fs:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c_BFs0ll, BFu0s_BFu0c_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0c_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c_BFs0s) C1{ Fs:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c_BFs0s, BFu0s_BFu0c_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0c_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c_BFu0c) C1{ Fs:0 Fc:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c_BFu0c, BFu0s_BFu0c_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0c_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c_BFu0i) C1{ Fs:0 Fc:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c_BFu0i, BFu0s_BFu0c_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0c_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c_BFu0ll) C1{ Fs:0 Fc:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c_BFu0ll, BFu0s_BFu0c_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0c_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0c_BFu0s) C1{ Fs:0 Fc:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0c_BFu0s, BFu0s_BFu0c_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i) C1{ Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i, BFu0s_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0i_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i_BFs0c) C1{ Fs:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i_BFs0c, BFu0s_BFu0c_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0i_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i_BFs0i) C1{ Fs:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i_BFs0i, BFu0s_BFu0c_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0i_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i_BFs0ll) C1{ Fs:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i_BFs0ll, BFu0s_BFu0c_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0i_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i_BFs0s) C1{ Fs:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i_BFs0s, BFu0s_BFu0c_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0i_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i_BFu0c) C1{ Fs:0 Fc:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i_BFu0c, BFu0s_BFu0c_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0i_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i_BFu0i) C1{ Fs:0 Fc:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i_BFu0i, BFu0s_BFu0c_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0i_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i_BFu0ll) C1{ Fs:0 Fc:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i_BFu0ll, BFu0s_BFu0c_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0i_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0i_BFu0s) C1{ Fs:0 Fc:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0i_BFu0s, BFu0s_BFu0c_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll) C1{ Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll, BFu0s_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll_BFs0c) C1{ Fs:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll_BFs0c, BFu0s_BFu0c_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll_BFs0i) C1{ Fs:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll_BFs0i, BFu0s_BFu0c_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll_BFs0ll) C1{ Fs:0 Fc:0 FL:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll_BFs0ll, BFu0s_BFu0c_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll_BFs0s) C1{ Fs:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll_BFs0s, BFu0s_BFu0c_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll_BFu0c) C1{ Fs:0 Fc:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll_BFu0c, BFu0s_BFu0c_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll_BFu0i) C1{ Fs:0 Fc:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll_BFu0i, BFu0s_BFu0c_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll_BFu0ll) C1{ Fs:0 Fc:0 FL:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll_BFu0ll, BFu0s_BFu0c_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0ll_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0ll_BFu0s) C1{ Fs:0 Fc:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0ll_BFu0s, BFu0s_BFu0c_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s) C1{ Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s, BFu0s_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0s_BFs0c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s_BFs0c) C1{ Fs:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s_BFs0c, BFu0s_BFu0c_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0s_BFs0i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s_BFs0i) C1{ Fs:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s_BFs0i, BFu0s_BFu0c_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0s_BFs0ll  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s_BFs0ll) C1{ Fs:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s_BFs0ll, BFu0s_BFu0c_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0s_BFs0s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s_BFs0s) C1{ Fs:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s_BFs0s, BFu0s_BFu0c_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0c_BFu0s_BFu0c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s_BFu0c) C1{ Fs:0 Fc:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0c_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s_BFu0c, BFu0s_BFu0c_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0c_BFu0s_BFu0i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s_BFu0i) C1{ Fs:0 Fc:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0c_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s_BFu0i, BFu0s_BFu0c_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0c_BFu0s_BFu0ll  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s_BFu0ll) C1{ Fs:0 Fc:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0c_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s_BFu0ll, BFu0s_BFu0c_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0c_BFu0s_BFu0s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0c_BFu0s_BFu0s) C1{ Fs:0 Fc:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0c_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu0s_BFu0s, BFu0s_BFu0c_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0c_BFu15i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0s_BFu0c_BFu15i) C1{ Fs:0 Fc:0 Fi:15}



static void Test_BFu0s_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu15i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu15i, BFu0s_BFu0c_BFu15i)
//============================================================================


struct  BFu0s_BFu0c_BFu15ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0s_BFu0c_BFu15ll) C1{ Fs:0 Fc:0 FL:15}



static void Test_BFu0s_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu15ll, BFu0s_BFu0c_BFu15ll)
//============================================================================


struct  BFu0s_BFu0c_BFu15s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0s_BFu0c_BFu15s) C1{ Fs:0 Fc:0 Fs:15}



static void Test_BFu0s_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu15s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu15s, BFu0s_BFu0c_BFu15s)
//============================================================================


struct  BFu0s_BFu0c_BFu16i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0s_BFu0c_BFu16i) C1{ Fs:0 Fc:0 Fi:16}



static void Test_BFu0s_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu16i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu16i, BFu0s_BFu0c_BFu16i)
//============================================================================


struct  BFu0s_BFu0c_BFu16ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0s_BFu0c_BFu16ll) C1{ Fs:0 Fc:0 FL:16}



static void Test_BFu0s_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu16ll, BFu0s_BFu0c_BFu16ll)
//============================================================================


struct  BFu0s_BFu0c_BFu16s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0s_BFu0c_BFu16s) C1{ Fs:0 Fc:0 Fs:16}



static void Test_BFu0s_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu16s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu16s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu16s, BFu0s_BFu0c_BFu16s)
//============================================================================


struct  BFu0s_BFu0c_BFu17i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0s_BFu0c_BFu17i) C1{ Fs:0 Fc:0 Fi:17}



static void Test_BFu0s_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu17i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu17i, BFu0s_BFu0c_BFu17i)
//============================================================================


struct  BFu0s_BFu0c_BFu17ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0s_BFu0c_BFu17ll) C1{ Fs:0 Fc:0 FL:17}



static void Test_BFu0s_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu17ll, BFu0s_BFu0c_BFu17ll)
//============================================================================


struct  BFu0s_BFu0c_BFu1c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0s_BFu0c_BFu1c) C1{ Fs:0 Fc:0 Fc:1}



static void Test_BFu0s_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu1c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu1c, BFu0s_BFu0c_BFu1c)
//============================================================================


struct  BFu0s_BFu0c_BFu1i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0s_BFu0c_BFu1i) C1{ Fs:0 Fc:0 Fi:1}



static void Test_BFu0s_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu1i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu1i, BFu0s_BFu0c_BFu1i)
//============================================================================


struct  BFu0s_BFu0c_BFu1ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0s_BFu0c_BFu1ll) C1{ Fs:0 Fc:0 FL:1}



static void Test_BFu0s_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu1ll, BFu0s_BFu0c_BFu1ll)
//============================================================================


struct  BFu0s_BFu0c_BFu1s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0s_BFu0c_BFu1s) C1{ Fs:0 Fc:0 Fs:1}



static void Test_BFu0s_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu1s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu1s, BFu0s_BFu0c_BFu1s)
//============================================================================


struct  BFu0s_BFu0c_BFu31i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0s_BFu0c_BFu31i) C1{ Fs:0 Fc:0 Fi:31}



static void Test_BFu0s_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu31i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu31i, BFu0s_BFu0c_BFu31i)
//============================================================================


struct  BFu0s_BFu0c_BFu31ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0s_BFu0c_BFu31ll) C1{ Fs:0 Fc:0 FL:31}



static void Test_BFu0s_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu31ll, BFu0s_BFu0c_BFu31ll)
//============================================================================


struct  BFu0s_BFu0c_BFu32i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0s_BFu0c_BFu32i) C1{ Fs:0 Fc:0 Fi:32}



static void Test_BFu0s_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu32i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu32i, BFu0s_BFu0c_BFu32i)
//============================================================================


struct  BFu0s_BFu0c_BFu32ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0s_BFu0c_BFu32ll) C1{ Fs:0 Fc:0 FL:32}



static void Test_BFu0s_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu32ll, BFu0s_BFu0c_BFu32ll)
//============================================================================


struct  BFu0s_BFu0c_BFu33  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0s_BFu0c_BFu33) C1{ Fs:0 Fc:0 FL:33}



static void Test_BFu0s_BFu0c_BFu33()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu33");
    static STRUCT_IF_C BFu0s_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu33, BFu0s_BFu0c_BFu33)
//============================================================================


struct  BFu0s_BFu0c_BFu7c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0s_BFu0c_BFu7c) C1{ Fs:0 Fc:0 Fc:7}



static void Test_BFu0s_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu7c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu7c, BFu0s_BFu0c_BFu7c)
//============================================================================


struct  BFu0s_BFu0c_BFu7i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0s_BFu0c_BFu7i) C1{ Fs:0 Fc:0 Fi:7}



static void Test_BFu0s_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu7i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu7i, BFu0s_BFu0c_BFu7i)
//============================================================================


struct  BFu0s_BFu0c_BFu7ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0s_BFu0c_BFu7ll) C1{ Fs:0 Fc:0 FL:7}



static void Test_BFu0s_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu7ll, BFu0s_BFu0c_BFu7ll)
//============================================================================


struct  BFu0s_BFu0c_BFu7s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0s_BFu0c_BFu7s) C1{ Fs:0 Fc:0 Fs:7}



static void Test_BFu0s_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu7s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu7s, BFu0s_BFu0c_BFu7s)
//============================================================================


struct  BFu0s_BFu0c_BFu8c  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0s_BFu0c_BFu8c) C1{ Fs:0 Fc:0 Fc:8}



static void Test_BFu0s_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu8c");
    static STRUCT_IF_C BFu0s_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu8c, BFu0s_BFu0c_BFu8c)
//============================================================================


struct  BFu0s_BFu0c_BFu8i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0s_BFu0c_BFu8i) C1{ Fs:0 Fc:0 Fi:8}



static void Test_BFu0s_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu8i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu8i, BFu0s_BFu0c_BFu8i)
//============================================================================


struct  BFu0s_BFu0c_BFu8ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0s_BFu0c_BFu8ll) C1{ Fs:0 Fc:0 FL:8}



static void Test_BFu0s_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu8ll, BFu0s_BFu0c_BFu8ll)
//============================================================================


struct  BFu0s_BFu0c_BFu8s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0s_BFu0c_BFu8s) C1{ Fs:0 Fc:0 Fs:8}



static void Test_BFu0s_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu8s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu8s, BFu0s_BFu0c_BFu8s)
//============================================================================


struct  BFu0s_BFu0c_BFu9i  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0s_BFu0c_BFu9i) C1{ Fs:0 Fc:0 Fi:9}



static void Test_BFu0s_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu9i");
    static STRUCT_IF_C BFu0s_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu9i, BFu0s_BFu0c_BFu9i)
//============================================================================


struct  BFu0s_BFu0c_BFu9ll  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0s_BFu0c_BFu9ll) C1{ Fs:0 Fc:0 FL:9}



static void Test_BFu0s_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu9ll, BFu0s_BFu0c_BFu9ll)
//============================================================================


struct  BFu0s_BFu0c_BFu9s  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0s_BFu0c_BFu9s) C1{ Fs:0 Fc:0 Fs:9}



static void Test_BFu0s_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu0c_BFu9s");
    static STRUCT_IF_C BFu0s_BFu0c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_BFu9s, BFu0s_BFu0c_BFu9s)
//============================================================================


struct  BFu0s_BFu0c_C  {
  unsigned short  :0;
  unsigned char  :0;
  char v1;
};
//SIG(1 BFu0s_BFu0c_C) C1{ Fs:0 Fc:0 Fc}



static void Test_BFu0s_BFu0c_C()
{
  {
    init_simple_test("BFu0s_BFu0c_C");
    static STRUCT_IF_C BFu0s_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_C)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_C.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_C, BFu0s_BFu0c_C)
//============================================================================


struct  BFu0s_BFu0c_D  {
  unsigned short  :0;
  unsigned char  :0;
  double v1;
};
//SIG(1 BFu0s_BFu0c_D) C1{ Fs:0 Fc:0 FL}



static void Test_BFu0s_BFu0c_D()
{
  {
    init_simple_test("BFu0s_BFu0c_D");
    static STRUCT_IF_C BFu0s_BFu0c_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_D)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_D.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_D, BFu0s_BFu0c_D)
//============================================================================


struct  BFu0s_BFu0c_F  {
  unsigned short  :0;
  unsigned char  :0;
  float v1;
};
//SIG(1 BFu0s_BFu0c_F) C1{ Fs:0 Fc:0 Fi}



static void Test_BFu0s_BFu0c_F()
{
  {
    init_simple_test("BFu0s_BFu0c_F");
    static STRUCT_IF_C BFu0s_BFu0c_F lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_F)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_F.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_F, BFu0s_BFu0c_F)
//============================================================================


struct  BFu0s_BFu0c_I  {
  unsigned short  :0;
  unsigned char  :0;
  int v1;
};
//SIG(1 BFu0s_BFu0c_I) C1{ Fs:0 Fc:0 Fi}



static void Test_BFu0s_BFu0c_I()
{
  {
    init_simple_test("BFu0s_BFu0c_I");
    static STRUCT_IF_C BFu0s_BFu0c_I lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_I)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_I.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_I, BFu0s_BFu0c_I)
//============================================================================


struct  BFu0s_BFu0c_Ip  {
  unsigned short  :0;
  unsigned char  :0;
  int *v1;
};
//SIG(1 BFu0s_BFu0c_Ip) C1{ Fs:0 Fc:0 Fp}



static void Test_BFu0s_BFu0c_Ip()
{
  {
    init_simple_test("BFu0s_BFu0c_Ip");
    static STRUCT_IF_C BFu0s_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_Ip.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_Ip, BFu0s_BFu0c_Ip)
//============================================================================


struct  BFu0s_BFu0c_L  {
  unsigned short  :0;
  unsigned char  :0;
  __tsi64 v1;
};
//SIG(1 BFu0s_BFu0c_L) C1{ Fs:0 Fc:0 FL}



static void Test_BFu0s_BFu0c_L()
{
  {
    init_simple_test("BFu0s_BFu0c_L");
    static STRUCT_IF_C BFu0s_BFu0c_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_L)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_L.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_L, BFu0s_BFu0c_L)
//============================================================================


struct  BFu0s_BFu0c_S  {
  unsigned short  :0;
  unsigned char  :0;
  short v1;
};
//SIG(1 BFu0s_BFu0c_S) C1{ Fs:0 Fc:0 Fs}



static void Test_BFu0s_BFu0c_S()
{
  {
    init_simple_test("BFu0s_BFu0c_S");
    static STRUCT_IF_C BFu0s_BFu0c_S lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0c_S)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_S.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_S, BFu0s_BFu0c_S)
//============================================================================


struct  BFu0s_BFu0c_Uc  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned char v1;
};
//SIG(1 BFu0s_BFu0c_Uc) C1{ Fs:0 Fc:0 Fc}



static void Test_BFu0s_BFu0c_Uc()
{
  {
    init_simple_test("BFu0s_BFu0c_Uc");
    static STRUCT_IF_C BFu0s_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_Uc.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_Uc, BFu0s_BFu0c_Uc)
//============================================================================


struct  BFu0s_BFu0c_Ui  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned int v1;
};
//SIG(1 BFu0s_BFu0c_Ui) C1{ Fs:0 Fc:0 Fi}



static void Test_BFu0s_BFu0c_Ui()
{
  {
    init_simple_test("BFu0s_BFu0c_Ui");
    static STRUCT_IF_C BFu0s_BFu0c_Ui lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_Ui.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_Ui, BFu0s_BFu0c_Ui)
//============================================================================


struct  BFu0s_BFu0c_Ul  {
  unsigned short  :0;
  unsigned char  :0;
  __tsu64 v1;
};
//SIG(1 BFu0s_BFu0c_Ul) C1{ Fs:0 Fc:0 FL}



static void Test_BFu0s_BFu0c_Ul()
{
  {
    init_simple_test("BFu0s_BFu0c_Ul");
    static STRUCT_IF_C BFu0s_BFu0c_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_Ul.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_Ul, BFu0s_BFu0c_Ul)
//============================================================================


struct  BFu0s_BFu0c_Us  {
  unsigned short  :0;
  unsigned char  :0;
  unsigned short v1;
};
//SIG(1 BFu0s_BFu0c_Us) C1{ Fs:0 Fc:0 Fs}



static void Test_BFu0s_BFu0c_Us()
{
  {
    init_simple_test("BFu0s_BFu0c_Us");
    static STRUCT_IF_C BFu0s_BFu0c_Us lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_Us.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_Us, BFu0s_BFu0c_Us)
//============================================================================


struct  BFu0s_BFu0c_Vp  {
  unsigned short  :0;
  unsigned char  :0;
  void *v1;
};
//SIG(1 BFu0s_BFu0c_Vp) C1{ Fs:0 Fc:0 Fp}



static void Test_BFu0s_BFu0c_Vp()
{
  {
    init_simple_test("BFu0s_BFu0c_Vp");
    static STRUCT_IF_C BFu0s_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0c_Vp.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0c_Vp, BFu0s_BFu0c_Vp)
//============================================================================


struct  BFu0s_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i) C1{ Fs:0 Fi:0}



static void Test_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i, BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c) C1{ Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c, BFu0s_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0c_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c_BFs0c) C1{ Fs:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c_BFs0c, BFu0s_BFu0i_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0c_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c_BFs0i) C1{ Fs:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c_BFs0i, BFu0s_BFu0i_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0c_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c_BFs0ll) C1{ Fs:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c_BFs0ll, BFu0s_BFu0i_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0c_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c_BFs0s) C1{ Fs:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c_BFs0s, BFu0s_BFu0i_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFs0c_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c_BFu0c) C1{ Fs:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c_BFu0c, BFu0s_BFu0i_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0c_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c_BFu0i) C1{ Fs:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c_BFu0i, BFu0s_BFu0i_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0c_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c_BFu0ll) C1{ Fs:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c_BFu0ll, BFu0s_BFu0i_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0c_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0c_BFu0s) C1{ Fs:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0c_BFu0s, BFu0s_BFu0i_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i) C1{ Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i, BFu0s_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0i_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i_BFs0c) C1{ Fs:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i_BFs0c, BFu0s_BFu0i_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0i_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i_BFs0i) C1{ Fs:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i_BFs0i, BFu0s_BFu0i_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0i_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i_BFs0ll) C1{ Fs:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i_BFs0ll, BFu0s_BFu0i_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0i_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i_BFs0s) C1{ Fs:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i_BFs0s, BFu0s_BFu0i_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFs0i_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i_BFu0c) C1{ Fs:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i_BFu0c, BFu0s_BFu0i_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0i_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i_BFu0i) C1{ Fs:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i_BFu0i, BFu0s_BFu0i_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0i_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i_BFu0ll) C1{ Fs:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i_BFu0ll, BFu0s_BFu0i_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0i_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0i_BFu0s) C1{ Fs:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0i_BFu0s, BFu0s_BFu0i_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll) C1{ Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll, BFu0s_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll_BFs0c) C1{ Fs:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll_BFs0c, BFu0s_BFu0i_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll_BFs0i) C1{ Fs:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll_BFs0i, BFu0s_BFu0i_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll_BFs0ll) C1{ Fs:0 Fi:0 FL:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll_BFs0ll, BFu0s_BFu0i_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll_BFs0s) C1{ Fs:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll_BFs0s, BFu0s_BFu0i_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll_BFu0c) C1{ Fs:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll_BFu0c, BFu0s_BFu0i_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll_BFu0i) C1{ Fs:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll_BFu0i, BFu0s_BFu0i_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll_BFu0ll) C1{ Fs:0 Fi:0 FL:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll_BFu0ll, BFu0s_BFu0i_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0ll_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0ll_BFu0s) C1{ Fs:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0ll_BFu0s, BFu0s_BFu0i_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s) C1{ Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s, BFu0s_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFs0s_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s_BFs0c) C1{ Fs:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s_BFs0c, BFu0s_BFu0i_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0s_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s_BFs0i) C1{ Fs:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s_BFs0i, BFu0s_BFu0i_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0s_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s_BFs0ll) C1{ Fs:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s_BFs0ll, BFu0s_BFu0i_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0s_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s_BFs0s) C1{ Fs:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s_BFs0s, BFu0s_BFu0i_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFs0s_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s_BFu0c) C1{ Fs:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0i_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s_BFu0c, BFu0s_BFu0i_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFs0s_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s_BFu0i) C1{ Fs:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0i_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s_BFu0i, BFu0s_BFu0i_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFs0s_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s_BFu0ll) C1{ Fs:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0i_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s_BFu0ll, BFu0s_BFu0i_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFs0s_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFs0s_BFu0s) C1{ Fs:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0i_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFs0s_BFu0s, BFu0s_BFu0i_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c) C1{ Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c, BFu0s_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0c_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c_BFs0c) C1{ Fs:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c_BFs0c, BFu0s_BFu0i_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0c_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c_BFs0i) C1{ Fs:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c_BFs0i, BFu0s_BFu0i_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0c_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c_BFs0ll) C1{ Fs:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c_BFs0ll, BFu0s_BFu0i_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0c_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c_BFs0s) C1{ Fs:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c_BFs0s, BFu0s_BFu0i_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0c_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c_BFu0c) C1{ Fs:0 Fi:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c_BFu0c, BFu0s_BFu0i_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0c_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c_BFu0i) C1{ Fs:0 Fi:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c_BFu0i, BFu0s_BFu0i_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0c_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c_BFu0ll) C1{ Fs:0 Fi:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c_BFu0ll, BFu0s_BFu0i_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0c_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0c_BFu0s) C1{ Fs:0 Fi:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0c_BFu0s, BFu0s_BFu0i_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i) C1{ Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i, BFu0s_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0i_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i_BFs0c) C1{ Fs:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i_BFs0c, BFu0s_BFu0i_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0i_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i_BFs0i) C1{ Fs:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i_BFs0i, BFu0s_BFu0i_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0i_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i_BFs0ll) C1{ Fs:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i_BFs0ll, BFu0s_BFu0i_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0i_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i_BFs0s) C1{ Fs:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i_BFs0s, BFu0s_BFu0i_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0i_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i_BFu0c) C1{ Fs:0 Fi:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i_BFu0c, BFu0s_BFu0i_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0i_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i_BFu0i) C1{ Fs:0 Fi:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i_BFu0i, BFu0s_BFu0i_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0i_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i_BFu0ll) C1{ Fs:0 Fi:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i_BFu0ll, BFu0s_BFu0i_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0i_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0i_BFu0s) C1{ Fs:0 Fi:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0i_BFu0s, BFu0s_BFu0i_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll) C1{ Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll, BFu0s_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll_BFs0c) C1{ Fs:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll_BFs0c, BFu0s_BFu0i_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll_BFs0i) C1{ Fs:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll_BFs0i, BFu0s_BFu0i_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll_BFs0ll) C1{ Fs:0 Fi:0 FL:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll_BFs0ll, BFu0s_BFu0i_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll_BFs0s) C1{ Fs:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll_BFs0s, BFu0s_BFu0i_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll_BFu0c) C1{ Fs:0 Fi:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll_BFu0c, BFu0s_BFu0i_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll_BFu0i) C1{ Fs:0 Fi:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll_BFu0i, BFu0s_BFu0i_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll_BFu0ll) C1{ Fs:0 Fi:0 FL:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll_BFu0ll, BFu0s_BFu0i_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0ll_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0ll_BFu0s) C1{ Fs:0 Fi:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0ll_BFu0s, BFu0s_BFu0i_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s) C1{ Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s, BFu0s_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0s_BFs0c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s_BFs0c) C1{ Fs:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s_BFs0c, BFu0s_BFu0i_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0s_BFs0i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s_BFs0i) C1{ Fs:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s_BFs0i, BFu0s_BFu0i_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0s_BFs0ll  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s_BFs0ll) C1{ Fs:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s_BFs0ll, BFu0s_BFu0i_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0s_BFs0s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s_BFs0s) C1{ Fs:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s_BFs0s, BFu0s_BFu0i_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0i_BFu0s_BFu0c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s_BFu0c) C1{ Fs:0 Fi:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0i_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s_BFu0c, BFu0s_BFu0i_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0i_BFu0s_BFu0i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s_BFu0i) C1{ Fs:0 Fi:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0i_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s_BFu0i, BFu0s_BFu0i_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0i_BFu0s_BFu0ll  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s_BFu0ll) C1{ Fs:0 Fi:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0i_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s_BFu0ll, BFu0s_BFu0i_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0i_BFu0s_BFu0s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0i_BFu0s_BFu0s) C1{ Fs:0 Fi:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0i_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0i_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu0s_BFu0s, BFu0s_BFu0i_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0i_BFu15i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0s_BFu0i_BFu15i) C1{ Fs:0 Fi:0 Fi:15}



static void Test_BFu0s_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu15i, BFu0s_BFu0i_BFu15i)
//============================================================================


struct  BFu0s_BFu0i_BFu15ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0s_BFu0i_BFu15ll) C1{ Fs:0 Fi:0 FL:15}



static void Test_BFu0s_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu15ll, BFu0s_BFu0i_BFu15ll)
//============================================================================


struct  BFu0s_BFu0i_BFu15s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0s_BFu0i_BFu15s) C1{ Fs:0 Fi:0 Fs:15}



static void Test_BFu0s_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu15s, BFu0s_BFu0i_BFu15s)
//============================================================================


struct  BFu0s_BFu0i_BFu16i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0s_BFu0i_BFu16i) C1{ Fs:0 Fi:0 Fi:16}



static void Test_BFu0s_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu16i, BFu0s_BFu0i_BFu16i)
//============================================================================


struct  BFu0s_BFu0i_BFu16ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0s_BFu0i_BFu16ll) C1{ Fs:0 Fi:0 FL:16}



static void Test_BFu0s_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu16ll, BFu0s_BFu0i_BFu16ll)
//============================================================================


struct  BFu0s_BFu0i_BFu16s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0s_BFu0i_BFu16s) C1{ Fs:0 Fi:0 Fs:16}



static void Test_BFu0s_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu16s, BFu0s_BFu0i_BFu16s)
//============================================================================


struct  BFu0s_BFu0i_BFu17i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0s_BFu0i_BFu17i) C1{ Fs:0 Fi:0 Fi:17}



static void Test_BFu0s_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu17i, BFu0s_BFu0i_BFu17i)
//============================================================================


struct  BFu0s_BFu0i_BFu17ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0s_BFu0i_BFu17ll) C1{ Fs:0 Fi:0 FL:17}



static void Test_BFu0s_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu17ll, BFu0s_BFu0i_BFu17ll)
//============================================================================


struct  BFu0s_BFu0i_BFu1c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0s_BFu0i_BFu1c) C1{ Fs:0 Fi:0 Fc:1}



static void Test_BFu0s_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu1c, BFu0s_BFu0i_BFu1c)
//============================================================================


struct  BFu0s_BFu0i_BFu1i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0s_BFu0i_BFu1i) C1{ Fs:0 Fi:0 Fi:1}



static void Test_BFu0s_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu1i, BFu0s_BFu0i_BFu1i)
//============================================================================


struct  BFu0s_BFu0i_BFu1ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0s_BFu0i_BFu1ll) C1{ Fs:0 Fi:0 FL:1}



static void Test_BFu0s_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu1ll, BFu0s_BFu0i_BFu1ll)
//============================================================================


struct  BFu0s_BFu0i_BFu1s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0s_BFu0i_BFu1s) C1{ Fs:0 Fi:0 Fs:1}



static void Test_BFu0s_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu1s, BFu0s_BFu0i_BFu1s)
//============================================================================


struct  BFu0s_BFu0i_BFu31i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0s_BFu0i_BFu31i) C1{ Fs:0 Fi:0 Fi:31}



static void Test_BFu0s_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu31i, BFu0s_BFu0i_BFu31i)
//============================================================================


struct  BFu0s_BFu0i_BFu31ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0s_BFu0i_BFu31ll) C1{ Fs:0 Fi:0 FL:31}



static void Test_BFu0s_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu31ll, BFu0s_BFu0i_BFu31ll)
//============================================================================


struct  BFu0s_BFu0i_BFu32i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0s_BFu0i_BFu32i) C1{ Fs:0 Fi:0 Fi:32}



static void Test_BFu0s_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu32i, BFu0s_BFu0i_BFu32i)
//============================================================================


struct  BFu0s_BFu0i_BFu32ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0s_BFu0i_BFu32ll) C1{ Fs:0 Fi:0 FL:32}



static void Test_BFu0s_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu32ll, BFu0s_BFu0i_BFu32ll)
//============================================================================


struct  BFu0s_BFu0i_BFu33  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0s_BFu0i_BFu33) C1{ Fs:0 Fi:0 FL:33}



static void Test_BFu0s_BFu0i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu33");
    static STRUCT_IF_C BFu0s_BFu0i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu33, BFu0s_BFu0i_BFu33)
//============================================================================


struct  BFu0s_BFu0i_BFu7c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0s_BFu0i_BFu7c) C1{ Fs:0 Fi:0 Fc:7}



static void Test_BFu0s_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu7c, BFu0s_BFu0i_BFu7c)
//============================================================================


struct  BFu0s_BFu0i_BFu7i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0s_BFu0i_BFu7i) C1{ Fs:0 Fi:0 Fi:7}



static void Test_BFu0s_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu7i, BFu0s_BFu0i_BFu7i)
//============================================================================


struct  BFu0s_BFu0i_BFu7ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0s_BFu0i_BFu7ll) C1{ Fs:0 Fi:0 FL:7}



static void Test_BFu0s_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu7ll, BFu0s_BFu0i_BFu7ll)
//============================================================================


struct  BFu0s_BFu0i_BFu7s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0s_BFu0i_BFu7s) C1{ Fs:0 Fi:0 Fs:7}



static void Test_BFu0s_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu7s, BFu0s_BFu0i_BFu7s)
//============================================================================


struct  BFu0s_BFu0i_BFu8c  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0s_BFu0i_BFu8c) C1{ Fs:0 Fi:0 Fc:8}



static void Test_BFu0s_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu8c, BFu0s_BFu0i_BFu8c)
//============================================================================


struct  BFu0s_BFu0i_BFu8i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0s_BFu0i_BFu8i) C1{ Fs:0 Fi:0 Fi:8}



static void Test_BFu0s_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu8i, BFu0s_BFu0i_BFu8i)
//============================================================================


struct  BFu0s_BFu0i_BFu8ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0s_BFu0i_BFu8ll) C1{ Fs:0 Fi:0 FL:8}



static void Test_BFu0s_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu8ll, BFu0s_BFu0i_BFu8ll)
//============================================================================


struct  BFu0s_BFu0i_BFu8s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0s_BFu0i_BFu8s) C1{ Fs:0 Fi:0 Fs:8}



static void Test_BFu0s_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu8s, BFu0s_BFu0i_BFu8s)
//============================================================================


struct  BFu0s_BFu0i_BFu9i  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0s_BFu0i_BFu9i) C1{ Fs:0 Fi:0 Fi:9}



static void Test_BFu0s_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu0i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu9i, BFu0s_BFu0i_BFu9i)
//============================================================================


struct  BFu0s_BFu0i_BFu9ll  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0s_BFu0i_BFu9ll) C1{ Fs:0 Fi:0 FL:9}



static void Test_BFu0s_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu9ll, BFu0s_BFu0i_BFu9ll)
//============================================================================


struct  BFu0s_BFu0i_BFu9s  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0s_BFu0i_BFu9s) C1{ Fs:0 Fi:0 Fs:9}



static void Test_BFu0s_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu0i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_BFu9s, BFu0s_BFu0i_BFu9s)
//============================================================================


struct  BFu0s_BFu0i_C  {
  unsigned short  :0;
  unsigned int  :0;
  char v1;
};
//SIG(1 BFu0s_BFu0i_C) C1{ Fs:0 Fi:0 Fc}



static void Test_BFu0s_BFu0i_C()
{
  {
    init_simple_test("BFu0s_BFu0i_C");
    static STRUCT_IF_C BFu0s_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_C)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_C.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_C, BFu0s_BFu0i_C)
//============================================================================


struct  BFu0s_BFu0i_D  {
  unsigned short  :0;
  unsigned int  :0;
  double v1;
};
//SIG(1 BFu0s_BFu0i_D) C1{ Fs:0 Fi:0 FL}



static void Test_BFu0s_BFu0i_D()
{
  {
    init_simple_test("BFu0s_BFu0i_D");
    static STRUCT_IF_C BFu0s_BFu0i_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_D)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_D.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_D, BFu0s_BFu0i_D)
//============================================================================


struct  BFu0s_BFu0i_F  {
  unsigned short  :0;
  unsigned int  :0;
  float v1;
};
//SIG(1 BFu0s_BFu0i_F) C1{ Fs:0 Fi:0 Fi}



static void Test_BFu0s_BFu0i_F()
{
  {
    init_simple_test("BFu0s_BFu0i_F");
    static STRUCT_IF_C BFu0s_BFu0i_F lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_F)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_F.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_F, BFu0s_BFu0i_F)
//============================================================================


struct  BFu0s_BFu0i_I  {
  unsigned short  :0;
  unsigned int  :0;
  int v1;
};
//SIG(1 BFu0s_BFu0i_I) C1{ Fs:0 Fi:0 Fi}



static void Test_BFu0s_BFu0i_I()
{
  {
    init_simple_test("BFu0s_BFu0i_I");
    static STRUCT_IF_C BFu0s_BFu0i_I lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_I)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_I.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_I, BFu0s_BFu0i_I)
//============================================================================


struct  BFu0s_BFu0i_Ip  {
  unsigned short  :0;
  unsigned int  :0;
  int *v1;
};
//SIG(1 BFu0s_BFu0i_Ip) C1{ Fs:0 Fi:0 Fp}



static void Test_BFu0s_BFu0i_Ip()
{
  {
    init_simple_test("BFu0s_BFu0i_Ip");
    static STRUCT_IF_C BFu0s_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_Ip.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_Ip, BFu0s_BFu0i_Ip)
//============================================================================


struct  BFu0s_BFu0i_L  {
  unsigned short  :0;
  unsigned int  :0;
  __tsi64 v1;
};
//SIG(1 BFu0s_BFu0i_L) C1{ Fs:0 Fi:0 FL}



static void Test_BFu0s_BFu0i_L()
{
  {
    init_simple_test("BFu0s_BFu0i_L");
    static STRUCT_IF_C BFu0s_BFu0i_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_L)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_L.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_L, BFu0s_BFu0i_L)
//============================================================================


struct  BFu0s_BFu0i_S  {
  unsigned short  :0;
  unsigned int  :0;
  short v1;
};
//SIG(1 BFu0s_BFu0i_S) C1{ Fs:0 Fi:0 Fs}



static void Test_BFu0s_BFu0i_S()
{
  {
    init_simple_test("BFu0s_BFu0i_S");
    static STRUCT_IF_C BFu0s_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0i_S)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_S.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_S, BFu0s_BFu0i_S)
//============================================================================


struct  BFu0s_BFu0i_Uc  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned char v1;
};
//SIG(1 BFu0s_BFu0i_Uc) C1{ Fs:0 Fi:0 Fc}



static void Test_BFu0s_BFu0i_Uc()
{
  {
    init_simple_test("BFu0s_BFu0i_Uc");
    static STRUCT_IF_C BFu0s_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_Uc.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_Uc, BFu0s_BFu0i_Uc)
//============================================================================


struct  BFu0s_BFu0i_Ui  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned int v1;
};
//SIG(1 BFu0s_BFu0i_Ui) C1{ Fs:0 Fi:0 Fi}



static void Test_BFu0s_BFu0i_Ui()
{
  {
    init_simple_test("BFu0s_BFu0i_Ui");
    static STRUCT_IF_C BFu0s_BFu0i_Ui lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_Ui.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_Ui, BFu0s_BFu0i_Ui)
//============================================================================


struct  BFu0s_BFu0i_Ul  {
  unsigned short  :0;
  unsigned int  :0;
  __tsu64 v1;
};
//SIG(1 BFu0s_BFu0i_Ul) C1{ Fs:0 Fi:0 FL}



static void Test_BFu0s_BFu0i_Ul()
{
  {
    init_simple_test("BFu0s_BFu0i_Ul");
    static STRUCT_IF_C BFu0s_BFu0i_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_Ul.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_Ul, BFu0s_BFu0i_Ul)
//============================================================================


struct  BFu0s_BFu0i_Us  {
  unsigned short  :0;
  unsigned int  :0;
  unsigned short v1;
};
//SIG(1 BFu0s_BFu0i_Us) C1{ Fs:0 Fi:0 Fs}



static void Test_BFu0s_BFu0i_Us()
{
  {
    init_simple_test("BFu0s_BFu0i_Us");
    static STRUCT_IF_C BFu0s_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_Us.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_Us, BFu0s_BFu0i_Us)
//============================================================================


struct  BFu0s_BFu0i_Vp  {
  unsigned short  :0;
  unsigned int  :0;
  void *v1;
};
//SIG(1 BFu0s_BFu0i_Vp) C1{ Fs:0 Fi:0 Fp}



static void Test_BFu0s_BFu0i_Vp()
{
  {
    init_simple_test("BFu0s_BFu0i_Vp");
    static STRUCT_IF_C BFu0s_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0i_Vp.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0i_Vp, BFu0s_BFu0i_Vp)
//============================================================================


struct  BFu0s_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll) C1{ Fs:0 FL:0}



static void Test_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll, BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c) C1{ Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c, BFu0s_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c_BFs0c) C1{ Fs:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c_BFs0c, BFu0s_BFu0ll_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c_BFs0i) C1{ Fs:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c_BFs0i, BFu0s_BFu0ll_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c_BFs0ll) C1{ Fs:0 FL:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c_BFs0ll, BFu0s_BFu0ll_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c_BFs0s) C1{ Fs:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c_BFs0s, BFu0s_BFu0ll_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c_BFu0c) C1{ Fs:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c_BFu0c, BFu0s_BFu0ll_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c_BFu0i) C1{ Fs:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c_BFu0i, BFu0s_BFu0ll_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c_BFu0ll) C1{ Fs:0 FL:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c_BFu0ll, BFu0s_BFu0ll_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0c_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0c_BFu0s) C1{ Fs:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0c_BFu0s, BFu0s_BFu0ll_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i) C1{ Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i, BFu0s_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i_BFs0c) C1{ Fs:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i_BFs0c, BFu0s_BFu0ll_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i_BFs0i) C1{ Fs:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i_BFs0i, BFu0s_BFu0ll_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i_BFs0ll) C1{ Fs:0 FL:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i_BFs0ll, BFu0s_BFu0ll_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i_BFs0s) C1{ Fs:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i_BFs0s, BFu0s_BFu0ll_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i_BFu0c) C1{ Fs:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i_BFu0c, BFu0s_BFu0ll_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i_BFu0i) C1{ Fs:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i_BFu0i, BFu0s_BFu0ll_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i_BFu0ll) C1{ Fs:0 FL:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i_BFu0ll, BFu0s_BFu0ll_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0i_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0i_BFu0s) C1{ Fs:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0i_BFu0s, BFu0s_BFu0ll_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll) C1{ Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll, BFu0s_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll_BFs0c) C1{ Fs:0 FL:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll_BFs0c, BFu0s_BFu0ll_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll_BFs0i) C1{ Fs:0 FL:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll_BFs0i, BFu0s_BFu0ll_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll_BFs0ll) C1{ Fs:0 FL:0 FL:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll_BFs0ll, BFu0s_BFu0ll_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll_BFs0s) C1{ Fs:0 FL:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll_BFs0s, BFu0s_BFu0ll_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll_BFu0c) C1{ Fs:0 FL:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll_BFu0c, BFu0s_BFu0ll_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll_BFu0i) C1{ Fs:0 FL:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll_BFu0i, BFu0s_BFu0ll_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll_BFu0ll) C1{ Fs:0 FL:0 FL:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll_BFu0ll, BFu0s_BFu0ll_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0ll_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0ll_BFu0s) C1{ Fs:0 FL:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0ll_BFu0s, BFu0s_BFu0ll_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s) C1{ Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s, BFu0s_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s_BFs0c) C1{ Fs:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s_BFs0c, BFu0s_BFu0ll_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s_BFs0i) C1{ Fs:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s_BFs0i, BFu0s_BFu0ll_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s_BFs0ll) C1{ Fs:0 FL:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s_BFs0ll, BFu0s_BFu0ll_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s_BFs0s) C1{ Fs:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s_BFs0s, BFu0s_BFu0ll_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s_BFu0c) C1{ Fs:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s_BFu0c, BFu0s_BFu0ll_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s_BFu0i) C1{ Fs:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s_BFu0i, BFu0s_BFu0ll_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s_BFu0ll) C1{ Fs:0 FL:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0ll_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s_BFu0ll, BFu0s_BFu0ll_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFs0s_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFs0s_BFu0s) C1{ Fs:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFs0s_BFu0s, BFu0s_BFu0ll_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c) C1{ Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c, BFu0s_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c_BFs0c) C1{ Fs:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c_BFs0c, BFu0s_BFu0ll_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c_BFs0i) C1{ Fs:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c_BFs0i, BFu0s_BFu0ll_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c_BFs0ll) C1{ Fs:0 FL:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c_BFs0ll, BFu0s_BFu0ll_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c_BFs0s) C1{ Fs:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c_BFs0s, BFu0s_BFu0ll_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c_BFu0c) C1{ Fs:0 FL:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c_BFu0c, BFu0s_BFu0ll_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c_BFu0i) C1{ Fs:0 FL:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c_BFu0i, BFu0s_BFu0ll_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c_BFu0ll) C1{ Fs:0 FL:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c_BFu0ll, BFu0s_BFu0ll_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0c_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0c_BFu0s) C1{ Fs:0 FL:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0c_BFu0s, BFu0s_BFu0ll_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i) C1{ Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i, BFu0s_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i_BFs0c) C1{ Fs:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i_BFs0c, BFu0s_BFu0ll_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i_BFs0i) C1{ Fs:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i_BFs0i, BFu0s_BFu0ll_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i_BFs0ll) C1{ Fs:0 FL:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i_BFs0ll, BFu0s_BFu0ll_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i_BFs0s) C1{ Fs:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i_BFs0s, BFu0s_BFu0ll_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i_BFu0c) C1{ Fs:0 FL:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i_BFu0c, BFu0s_BFu0ll_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i_BFu0i) C1{ Fs:0 FL:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i_BFu0i, BFu0s_BFu0ll_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i_BFu0ll) C1{ Fs:0 FL:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i_BFu0ll, BFu0s_BFu0ll_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0i_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0i_BFu0s) C1{ Fs:0 FL:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0i_BFu0s, BFu0s_BFu0ll_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll) C1{ Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll, BFu0s_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll_BFs0c) C1{ Fs:0 FL:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll_BFs0c, BFu0s_BFu0ll_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll_BFs0i) C1{ Fs:0 FL:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll_BFs0i, BFu0s_BFu0ll_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll_BFs0ll) C1{ Fs:0 FL:0 FL:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll_BFs0ll, BFu0s_BFu0ll_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll_BFs0s) C1{ Fs:0 FL:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll_BFs0s, BFu0s_BFu0ll_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll_BFu0c) C1{ Fs:0 FL:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll_BFu0c, BFu0s_BFu0ll_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll_BFu0i) C1{ Fs:0 FL:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll_BFu0i, BFu0s_BFu0ll_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll_BFu0ll) C1{ Fs:0 FL:0 FL:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll_BFu0ll, BFu0s_BFu0ll_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0ll_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0ll_BFu0s) C1{ Fs:0 FL:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0ll_BFu0s, BFu0s_BFu0ll_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s) C1{ Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s, BFu0s_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s_BFs0c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s_BFs0c) C1{ Fs:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s_BFs0c, BFu0s_BFu0ll_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s_BFs0i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s_BFs0i) C1{ Fs:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s_BFs0i, BFu0s_BFu0ll_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s_BFs0ll  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s_BFs0ll) C1{ Fs:0 FL:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s_BFs0ll, BFu0s_BFu0ll_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s_BFs0s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s_BFs0s) C1{ Fs:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s_BFs0s, BFu0s_BFu0ll_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s_BFu0c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s_BFu0c) C1{ Fs:0 FL:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0ll_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s_BFu0c, BFu0s_BFu0ll_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s_BFu0i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s_BFu0i) C1{ Fs:0 FL:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0ll_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s_BFu0i, BFu0s_BFu0ll_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s_BFu0ll  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s_BFu0ll) C1{ Fs:0 FL:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0ll_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s_BFu0ll, BFu0s_BFu0ll_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu0s_BFu0s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0ll_BFu0s_BFu0s) C1{ Fs:0 FL:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0ll_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu0s_BFu0s, BFu0s_BFu0ll_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0ll_BFu15i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0s_BFu0ll_BFu15i) C1{ Fs:0 FL:0 Fi:15}



static void Test_BFu0s_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu15i, BFu0s_BFu0ll_BFu15i)
//============================================================================


struct  BFu0s_BFu0ll_BFu15ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0s_BFu0ll_BFu15ll) C1{ Fs:0 FL:0 FL:15}



static void Test_BFu0s_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu15ll, BFu0s_BFu0ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu15s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0s_BFu0ll_BFu15s) C1{ Fs:0 FL:0 Fs:15}



static void Test_BFu0s_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu15s, BFu0s_BFu0ll_BFu15s)
//============================================================================


struct  BFu0s_BFu0ll_BFu16i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0s_BFu0ll_BFu16i) C1{ Fs:0 FL:0 Fi:16}



static void Test_BFu0s_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu16i, BFu0s_BFu0ll_BFu16i)
//============================================================================


struct  BFu0s_BFu0ll_BFu16ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0s_BFu0ll_BFu16ll) C1{ Fs:0 FL:0 FL:16}



static void Test_BFu0s_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu16ll, BFu0s_BFu0ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu16s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0s_BFu0ll_BFu16s) C1{ Fs:0 FL:0 Fs:16}



static void Test_BFu0s_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu16s, BFu0s_BFu0ll_BFu16s)
//============================================================================


struct  BFu0s_BFu0ll_BFu17i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0s_BFu0ll_BFu17i) C1{ Fs:0 FL:0 Fi:17}



static void Test_BFu0s_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu17i, BFu0s_BFu0ll_BFu17i)
//============================================================================


struct  BFu0s_BFu0ll_BFu17ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0s_BFu0ll_BFu17ll) C1{ Fs:0 FL:0 FL:17}



static void Test_BFu0s_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu17ll, BFu0s_BFu0ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu1c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0s_BFu0ll_BFu1c) C1{ Fs:0 FL:0 Fc:1}



static void Test_BFu0s_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu1c, BFu0s_BFu0ll_BFu1c)
//============================================================================


struct  BFu0s_BFu0ll_BFu1i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0s_BFu0ll_BFu1i) C1{ Fs:0 FL:0 Fi:1}



static void Test_BFu0s_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu1i, BFu0s_BFu0ll_BFu1i)
//============================================================================


struct  BFu0s_BFu0ll_BFu1ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0s_BFu0ll_BFu1ll) C1{ Fs:0 FL:0 FL:1}



static void Test_BFu0s_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu1ll, BFu0s_BFu0ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu1s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0s_BFu0ll_BFu1s) C1{ Fs:0 FL:0 Fs:1}



static void Test_BFu0s_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu1s, BFu0s_BFu0ll_BFu1s)
//============================================================================


struct  BFu0s_BFu0ll_BFu31i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0s_BFu0ll_BFu31i) C1{ Fs:0 FL:0 Fi:31}



static void Test_BFu0s_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu31i, BFu0s_BFu0ll_BFu31i)
//============================================================================


struct  BFu0s_BFu0ll_BFu31ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0s_BFu0ll_BFu31ll) C1{ Fs:0 FL:0 FL:31}



static void Test_BFu0s_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu31ll, BFu0s_BFu0ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu32i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0s_BFu0ll_BFu32i) C1{ Fs:0 FL:0 Fi:32}



static void Test_BFu0s_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu32i, BFu0s_BFu0ll_BFu32i)
//============================================================================


struct  BFu0s_BFu0ll_BFu32ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0s_BFu0ll_BFu32ll) C1{ Fs:0 FL:0 FL:32}



static void Test_BFu0s_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu32ll, BFu0s_BFu0ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu33  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0s_BFu0ll_BFu33) C1{ Fs:0 FL:0 FL:33}



static void Test_BFu0s_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu33, BFu0s_BFu0ll_BFu33)
//============================================================================


struct  BFu0s_BFu0ll_BFu7c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0s_BFu0ll_BFu7c) C1{ Fs:0 FL:0 Fc:7}



static void Test_BFu0s_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu7c, BFu0s_BFu0ll_BFu7c)
//============================================================================


struct  BFu0s_BFu0ll_BFu7i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0s_BFu0ll_BFu7i) C1{ Fs:0 FL:0 Fi:7}



static void Test_BFu0s_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu7i, BFu0s_BFu0ll_BFu7i)
//============================================================================


struct  BFu0s_BFu0ll_BFu7ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0s_BFu0ll_BFu7ll) C1{ Fs:0 FL:0 FL:7}



static void Test_BFu0s_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu7ll, BFu0s_BFu0ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu7s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0s_BFu0ll_BFu7s) C1{ Fs:0 FL:0 Fs:7}



static void Test_BFu0s_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu7s, BFu0s_BFu0ll_BFu7s)
//============================================================================


struct  BFu0s_BFu0ll_BFu8c  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0s_BFu0ll_BFu8c) C1{ Fs:0 FL:0 Fc:8}



static void Test_BFu0s_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu8c, BFu0s_BFu0ll_BFu8c)
//============================================================================


struct  BFu0s_BFu0ll_BFu8i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0s_BFu0ll_BFu8i) C1{ Fs:0 FL:0 Fi:8}



static void Test_BFu0s_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu8i, BFu0s_BFu0ll_BFu8i)
//============================================================================


struct  BFu0s_BFu0ll_BFu8ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0s_BFu0ll_BFu8ll) C1{ Fs:0 FL:0 FL:8}



static void Test_BFu0s_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu8ll, BFu0s_BFu0ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu8s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0s_BFu0ll_BFu8s) C1{ Fs:0 FL:0 Fs:8}



static void Test_BFu0s_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu8s, BFu0s_BFu0ll_BFu8s)
//============================================================================


struct  BFu0s_BFu0ll_BFu9i  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0s_BFu0ll_BFu9i) C1{ Fs:0 FL:0 Fi:9}



static void Test_BFu0s_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu9i, BFu0s_BFu0ll_BFu9i)
//============================================================================


struct  BFu0s_BFu0ll_BFu9ll  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0s_BFu0ll_BFu9ll) C1{ Fs:0 FL:0 FL:9}



static void Test_BFu0s_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu9ll, BFu0s_BFu0ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu0ll_BFu9s  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0s_BFu0ll_BFu9s) C1{ Fs:0 FL:0 Fs:9}



static void Test_BFu0s_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu0ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_BFu9s, BFu0s_BFu0ll_BFu9s)
//============================================================================


struct  BFu0s_BFu0ll_C  {
  unsigned short  :0;
  __tsu64  :0;
  char v1;
};
//SIG(1 BFu0s_BFu0ll_C) C1{ Fs:0 FL:0 Fc}



static void Test_BFu0s_BFu0ll_C()
{
  {
    init_simple_test("BFu0s_BFu0ll_C");
    static STRUCT_IF_C BFu0s_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_C.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_C, BFu0s_BFu0ll_C)
//============================================================================


struct  BFu0s_BFu0ll_D  {
  unsigned short  :0;
  __tsu64  :0;
  double v1;
};
//SIG(1 BFu0s_BFu0ll_D) C1{ Fs:0 FL:0 FL}



static void Test_BFu0s_BFu0ll_D()
{
  {
    init_simple_test("BFu0s_BFu0ll_D");
    static STRUCT_IF_C BFu0s_BFu0ll_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_D.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_D, BFu0s_BFu0ll_D)
//============================================================================


struct  BFu0s_BFu0ll_F  {
  unsigned short  :0;
  __tsu64  :0;
  float v1;
};
//SIG(1 BFu0s_BFu0ll_F) C1{ Fs:0 FL:0 Fi}



static void Test_BFu0s_BFu0ll_F()
{
  {
    init_simple_test("BFu0s_BFu0ll_F");
    static STRUCT_IF_C BFu0s_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_F.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_F, BFu0s_BFu0ll_F)
//============================================================================


struct  BFu0s_BFu0ll_I  {
  unsigned short  :0;
  __tsu64  :0;
  int v1;
};
//SIG(1 BFu0s_BFu0ll_I) C1{ Fs:0 FL:0 Fi}



static void Test_BFu0s_BFu0ll_I()
{
  {
    init_simple_test("BFu0s_BFu0ll_I");
    static STRUCT_IF_C BFu0s_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_I.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_I, BFu0s_BFu0ll_I)
//============================================================================


struct  BFu0s_BFu0ll_Ip  {
  unsigned short  :0;
  __tsu64  :0;
  int *v1;
};
//SIG(1 BFu0s_BFu0ll_Ip) C1{ Fs:0 FL:0 Fp}



static void Test_BFu0s_BFu0ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu0ll_Ip");
    static STRUCT_IF_C BFu0s_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_Ip.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_Ip, BFu0s_BFu0ll_Ip)
//============================================================================


struct  BFu0s_BFu0ll_L  {
  unsigned short  :0;
  __tsu64  :0;
  __tsi64 v1;
};
//SIG(1 BFu0s_BFu0ll_L) C1{ Fs:0 FL:0 FL}



static void Test_BFu0s_BFu0ll_L()
{
  {
    init_simple_test("BFu0s_BFu0ll_L");
    static STRUCT_IF_C BFu0s_BFu0ll_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_L.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_L, BFu0s_BFu0ll_L)
//============================================================================


struct  BFu0s_BFu0ll_S  {
  unsigned short  :0;
  __tsu64  :0;
  short v1;
};
//SIG(1 BFu0s_BFu0ll_S) C1{ Fs:0 FL:0 Fs}



static void Test_BFu0s_BFu0ll_S()
{
  {
    init_simple_test("BFu0s_BFu0ll_S");
    static STRUCT_IF_C BFu0s_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_S.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_S, BFu0s_BFu0ll_S)
//============================================================================


struct  BFu0s_BFu0ll_Uc  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned char v1;
};
//SIG(1 BFu0s_BFu0ll_Uc) C1{ Fs:0 FL:0 Fc}



static void Test_BFu0s_BFu0ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu0ll_Uc");
    static STRUCT_IF_C BFu0s_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_Uc.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_Uc, BFu0s_BFu0ll_Uc)
//============================================================================


struct  BFu0s_BFu0ll_Ui  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned int v1;
};
//SIG(1 BFu0s_BFu0ll_Ui) C1{ Fs:0 FL:0 Fi}



static void Test_BFu0s_BFu0ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu0ll_Ui");
    static STRUCT_IF_C BFu0s_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(4,4), "sizeof(BFu0s_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_Ui.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_Ui, BFu0s_BFu0ll_Ui)
//============================================================================


struct  BFu0s_BFu0ll_Ul  {
  unsigned short  :0;
  __tsu64  :0;
  __tsu64 v1;
};
//SIG(1 BFu0s_BFu0ll_Ul) C1{ Fs:0 FL:0 FL}



static void Test_BFu0s_BFu0ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu0ll_Ul");
    static STRUCT_IF_C BFu0s_BFu0ll_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_Ul.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_Ul, BFu0s_BFu0ll_Ul)
//============================================================================


struct  BFu0s_BFu0ll_Us  {
  unsigned short  :0;
  __tsu64  :0;
  unsigned short v1;
};
//SIG(1 BFu0s_BFu0ll_Us) C1{ Fs:0 FL:0 Fs}



static void Test_BFu0s_BFu0ll_Us()
{
  {
    init_simple_test("BFu0s_BFu0ll_Us");
    static STRUCT_IF_C BFu0s_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(2,2), "sizeof(BFu0s_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_Us.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_Us, BFu0s_BFu0ll_Us)
//============================================================================


struct  BFu0s_BFu0ll_Vp  {
  unsigned short  :0;
  __tsu64  :0;
  void *v1;
};
//SIG(1 BFu0s_BFu0ll_Vp) C1{ Fs:0 FL:0 Fp}



static void Test_BFu0s_BFu0ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu0ll_Vp");
    static STRUCT_IF_C BFu0s_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0ll_Vp.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0ll_Vp, BFu0s_BFu0ll_Vp)
//============================================================================


struct  BFu0s_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s) C1{ Fs:0 Fs:0}



static void Test_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s, BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c) C1{ Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c, BFu0s_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0c_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c_BFs0c) C1{ Fs:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c_BFs0c, BFu0s_BFu0s_BFs0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0c_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c_BFs0i) C1{ Fs:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c_BFs0i, BFu0s_BFu0s_BFs0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0c_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c_BFs0ll) C1{ Fs:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c_BFs0ll, BFu0s_BFu0s_BFs0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0c_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c_BFs0s) C1{ Fs:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c_BFs0s, BFu0s_BFu0s_BFs0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0c_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c_BFu0c) C1{ Fs:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c_BFu0c, BFu0s_BFu0s_BFs0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0c_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c_BFu0i) C1{ Fs:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c_BFu0i, BFu0s_BFu0s_BFs0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0c_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c_BFu0ll) C1{ Fs:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c_BFu0ll, BFu0s_BFu0s_BFs0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0c_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0c_BFu0s) C1{ Fs:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0c_BFu0s, BFu0s_BFu0s_BFs0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i) C1{ Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i, BFu0s_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0i_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i_BFs0c) C1{ Fs:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i_BFs0c, BFu0s_BFu0s_BFs0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0i_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i_BFs0i) C1{ Fs:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i_BFs0i, BFu0s_BFu0s_BFs0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0i_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i_BFs0ll) C1{ Fs:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i_BFs0ll, BFu0s_BFu0s_BFs0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0i_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i_BFs0s) C1{ Fs:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i_BFs0s, BFu0s_BFu0s_BFs0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0i_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i_BFu0c) C1{ Fs:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i_BFu0c, BFu0s_BFu0s_BFs0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0i_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i_BFu0i) C1{ Fs:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i_BFu0i, BFu0s_BFu0s_BFs0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0i_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i_BFu0ll) C1{ Fs:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i_BFu0ll, BFu0s_BFu0s_BFs0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0i_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0i_BFu0s) C1{ Fs:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0i_BFu0s, BFu0s_BFu0s_BFs0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll) C1{ Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll, BFu0s_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll_BFs0c) C1{ Fs:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll_BFs0c, BFu0s_BFu0s_BFs0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll_BFs0i) C1{ Fs:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll_BFs0i, BFu0s_BFu0s_BFs0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll_BFs0ll) C1{ Fs:0 Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll_BFs0ll, BFu0s_BFu0s_BFs0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll_BFs0s) C1{ Fs:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll_BFs0s, BFu0s_BFu0s_BFs0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll_BFu0c) C1{ Fs:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll_BFu0c, BFu0s_BFu0s_BFs0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll_BFu0i) C1{ Fs:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll_BFu0i, BFu0s_BFu0s_BFs0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll_BFu0ll) C1{ Fs:0 Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll_BFu0ll, BFu0s_BFu0s_BFs0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0ll_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0ll_BFu0s) C1{ Fs:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0ll_BFu0s, BFu0s_BFu0s_BFs0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s) C1{ Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s, BFu0s_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0s_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s_BFs0c) C1{ Fs:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s_BFs0c, BFu0s_BFu0s_BFs0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0s_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s_BFs0i) C1{ Fs:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s_BFs0i, BFu0s_BFu0s_BFs0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0s_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s_BFs0ll) C1{ Fs:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s_BFs0ll, BFu0s_BFu0s_BFs0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0s_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s_BFs0s) C1{ Fs:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s_BFs0s, BFu0s_BFu0s_BFs0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFs0s_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s_BFu0c) C1{ Fs:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0s_BFs0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s_BFu0c, BFu0s_BFu0s_BFs0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFs0s_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s_BFu0i) C1{ Fs:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0s_BFs0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s_BFu0i, BFu0s_BFu0s_BFs0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFs0s_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s_BFu0ll) C1{ Fs:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0s_BFs0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s_BFu0ll, BFu0s_BFu0s_BFs0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFs0s_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFs0s_BFu0s) C1{ Fs:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0s_BFs0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFs0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFs0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFs0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFs0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFs0s_BFu0s, BFu0s_BFu0s_BFs0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c) C1{ Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c, BFu0s_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0c_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c_BFs0c) C1{ Fs:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0c_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c_BFs0c, BFu0s_BFu0s_BFu0c_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0c_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c_BFs0i) C1{ Fs:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0c_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c_BFs0i, BFu0s_BFu0s_BFu0c_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0c_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c_BFs0ll) C1{ Fs:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0c_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c_BFs0ll, BFu0s_BFu0s_BFu0c_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0c_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c_BFs0s) C1{ Fs:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0c_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c_BFs0s, BFu0s_BFu0s_BFu0c_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0c_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c_BFu0c) C1{ Fs:0 Fs:0 Fc:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c_BFu0c, BFu0s_BFu0s_BFu0c_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0c_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c_BFu0i) C1{ Fs:0 Fs:0 Fc:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c_BFu0i, BFu0s_BFu0s_BFu0c_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0c_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c_BFu0ll) C1{ Fs:0 Fs:0 Fc:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c_BFu0ll, BFu0s_BFu0s_BFu0c_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0c_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0c_BFu0s) C1{ Fs:0 Fs:0 Fc:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0c_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0c_BFu0s, BFu0s_BFu0s_BFu0c_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i) C1{ Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i, BFu0s_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0i_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i_BFs0c) C1{ Fs:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0i_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i_BFs0c, BFu0s_BFu0s_BFu0i_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0i_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i_BFs0i) C1{ Fs:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0i_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i_BFs0i, BFu0s_BFu0s_BFu0i_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0i_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i_BFs0ll) C1{ Fs:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0i_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i_BFs0ll, BFu0s_BFu0s_BFu0i_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0i_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i_BFs0s) C1{ Fs:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0i_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i_BFs0s, BFu0s_BFu0s_BFu0i_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0i_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i_BFu0c) C1{ Fs:0 Fs:0 Fi:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i_BFu0c, BFu0s_BFu0s_BFu0i_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0i_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i_BFu0i) C1{ Fs:0 Fs:0 Fi:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i_BFu0i, BFu0s_BFu0s_BFu0i_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0i_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i_BFu0ll) C1{ Fs:0 Fs:0 Fi:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i_BFu0ll, BFu0s_BFu0s_BFu0i_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0i_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0i_BFu0s) C1{ Fs:0 Fs:0 Fi:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0i_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0i_BFu0s, BFu0s_BFu0s_BFu0i_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll) C1{ Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll, BFu0s_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll_BFs0c) C1{ Fs:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0ll_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll_BFs0c, BFu0s_BFu0s_BFu0ll_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll_BFs0i) C1{ Fs:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0ll_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll_BFs0i, BFu0s_BFu0s_BFu0ll_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll_BFs0ll) C1{ Fs:0 Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0ll_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll_BFs0ll, BFu0s_BFu0s_BFu0ll_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll_BFs0s) C1{ Fs:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0ll_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll_BFs0s, BFu0s_BFu0s_BFu0ll_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll_BFu0c) C1{ Fs:0 Fs:0 FL:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll_BFu0c, BFu0s_BFu0s_BFu0ll_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll_BFu0i) C1{ Fs:0 Fs:0 FL:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll_BFu0i, BFu0s_BFu0s_BFu0ll_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll_BFu0ll) C1{ Fs:0 Fs:0 FL:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll_BFu0ll, BFu0s_BFu0s_BFu0ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0ll_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0ll_BFu0s) C1{ Fs:0 Fs:0 FL:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0ll_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0ll_BFu0s, BFu0s_BFu0s_BFu0ll_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s) C1{ Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s, BFu0s_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0s_BFs0c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s_BFs0c) C1{ Fs:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0s_BFs0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s_BFs0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s_BFs0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s_BFs0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s_BFs0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s_BFs0c, BFu0s_BFu0s_BFu0s_BFs0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0s_BFs0i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s_BFs0i) C1{ Fs:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0s_BFs0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s_BFs0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s_BFs0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s_BFs0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s_BFs0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s_BFs0i, BFu0s_BFu0s_BFu0s_BFs0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0s_BFs0ll  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed __tsi64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s_BFs0ll) C1{ Fs:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0s_BFs0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s_BFs0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s_BFs0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s_BFs0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s_BFs0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s_BFs0ll, BFu0s_BFu0s_BFu0s_BFs0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0s_BFs0s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
  signed short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s_BFs0s) C1{ Fs:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0s_BFs0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s_BFs0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s_BFs0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s_BFs0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s_BFs0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s_BFs0s, BFu0s_BFu0s_BFu0s_BFs0s)
//============================================================================


struct  BFu0s_BFu0s_BFu0s_BFu0c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s_BFu0c) C1{ Fs:0 Fs:0 Fs:0 Fc:0}



static void Test_BFu0s_BFu0s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s_BFu0c)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s_BFu0c, BFu0s_BFu0s_BFu0s_BFu0c)
//============================================================================


struct  BFu0s_BFu0s_BFu0s_BFu0i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s_BFu0i) C1{ Fs:0 Fs:0 Fs:0 Fi:0}



static void Test_BFu0s_BFu0s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s_BFu0i)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s_BFu0i, BFu0s_BFu0s_BFu0s_BFu0i)
//============================================================================


struct  BFu0s_BFu0s_BFu0s_BFu0ll  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s_BFu0ll) C1{ Fs:0 Fs:0 Fs:0 FL:0}



static void Test_BFu0s_BFu0s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s_BFu0ll)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s_BFu0ll, BFu0s_BFu0s_BFu0s_BFu0ll)
//============================================================================


struct  BFu0s_BFu0s_BFu0s_BFu0s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu0s_BFu0s_BFu0s) C1{ Fs:0 Fs:0 Fs:0 Fs:0}



static void Test_BFu0s_BFu0s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu0s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 0, "sizeof(BFu0s_BFu0s_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu0s_BFu0s)");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu0s_BFu0s, BFu0s_BFu0s_BFu0s_BFu0s)
//============================================================================


struct  BFu0s_BFu0s_BFu15i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0s_BFu0s_BFu15i) C1{ Fs:0 Fs:0 Fi:15}



static void Test_BFu0s_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu15i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu15i, BFu0s_BFu0s_BFu15i)
//============================================================================


struct  BFu0s_BFu0s_BFu15ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0s_BFu0s_BFu15ll) C1{ Fs:0 Fs:0 FL:15}



static void Test_BFu0s_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu15ll, BFu0s_BFu0s_BFu15ll)
//============================================================================


struct  BFu0s_BFu0s_BFu15s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0s_BFu0s_BFu15s) C1{ Fs:0 Fs:0 Fs:15}



static void Test_BFu0s_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu15s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu15s, BFu0s_BFu0s_BFu15s)
//============================================================================


struct  BFu0s_BFu0s_BFu16i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0s_BFu0s_BFu16i) C1{ Fs:0 Fs:0 Fi:16}



static void Test_BFu0s_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu16i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu16i, BFu0s_BFu0s_BFu16i)
//============================================================================


struct  BFu0s_BFu0s_BFu16ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0s_BFu0s_BFu16ll) C1{ Fs:0 Fs:0 FL:16}



static void Test_BFu0s_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu16ll, BFu0s_BFu0s_BFu16ll)
//============================================================================


struct  BFu0s_BFu0s_BFu16s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0s_BFu0s_BFu16s) C1{ Fs:0 Fs:0 Fs:16}



static void Test_BFu0s_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu16s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu16s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu16s, BFu0s_BFu0s_BFu16s)
//============================================================================


struct  BFu0s_BFu0s_BFu17i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0s_BFu0s_BFu17i) C1{ Fs:0 Fs:0 Fi:17}



static void Test_BFu0s_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu17i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu17i, BFu0s_BFu0s_BFu17i)
//============================================================================


struct  BFu0s_BFu0s_BFu17ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0s_BFu0s_BFu17ll) C1{ Fs:0 Fs:0 FL:17}



static void Test_BFu0s_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu17ll, BFu0s_BFu0s_BFu17ll)
//============================================================================


struct  BFu0s_BFu0s_BFu1c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0s_BFu0s_BFu1c) C1{ Fs:0 Fs:0 Fc:1}



static void Test_BFu0s_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu1c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu1c, BFu0s_BFu0s_BFu1c)
//============================================================================


struct  BFu0s_BFu0s_BFu1i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0s_BFu0s_BFu1i) C1{ Fs:0 Fs:0 Fi:1}



static void Test_BFu0s_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu1i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu1i, BFu0s_BFu0s_BFu1i)
//============================================================================


struct  BFu0s_BFu0s_BFu1ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0s_BFu0s_BFu1ll) C1{ Fs:0 Fs:0 FL:1}



static void Test_BFu0s_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu1ll, BFu0s_BFu0s_BFu1ll)
//============================================================================


struct  BFu0s_BFu0s_BFu1s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0s_BFu0s_BFu1s) C1{ Fs:0 Fs:0 Fs:1}



static void Test_BFu0s_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu1s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu1s, BFu0s_BFu0s_BFu1s)
//============================================================================


struct  BFu0s_BFu0s_BFu31i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0s_BFu0s_BFu31i) C1{ Fs:0 Fs:0 Fi:31}



static void Test_BFu0s_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu31i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu31i, BFu0s_BFu0s_BFu31i)
//============================================================================


struct  BFu0s_BFu0s_BFu31ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0s_BFu0s_BFu31ll) C1{ Fs:0 Fs:0 FL:31}



static void Test_BFu0s_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu31ll, BFu0s_BFu0s_BFu31ll)
//============================================================================


struct  BFu0s_BFu0s_BFu32i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0s_BFu0s_BFu32i) C1{ Fs:0 Fs:0 Fi:32}



static void Test_BFu0s_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu32i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu32i, BFu0s_BFu0s_BFu32i)
//============================================================================


struct  BFu0s_BFu0s_BFu32ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0s_BFu0s_BFu32ll) C1{ Fs:0 Fs:0 FL:32}



static void Test_BFu0s_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu32ll, BFu0s_BFu0s_BFu32ll)
//============================================================================


struct  BFu0s_BFu0s_BFu33  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0s_BFu0s_BFu33) C1{ Fs:0 Fs:0 FL:33}



static void Test_BFu0s_BFu0s_BFu33()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu33");
    static STRUCT_IF_C BFu0s_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu33, BFu0s_BFu0s_BFu33)
//============================================================================


struct  BFu0s_BFu0s_BFu7c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0s_BFu0s_BFu7c) C1{ Fs:0 Fs:0 Fc:7}



static void Test_BFu0s_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu7c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu7c, BFu0s_BFu0s_BFu7c)
//============================================================================


struct  BFu0s_BFu0s_BFu7i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0s_BFu0s_BFu7i) C1{ Fs:0 Fs:0 Fi:7}



static void Test_BFu0s_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu7i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu7i, BFu0s_BFu0s_BFu7i)
//============================================================================


struct  BFu0s_BFu0s_BFu7ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0s_BFu0s_BFu7ll) C1{ Fs:0 Fs:0 FL:7}



static void Test_BFu0s_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu7ll, BFu0s_BFu0s_BFu7ll)
//============================================================================


struct  BFu0s_BFu0s_BFu7s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0s_BFu0s_BFu7s) C1{ Fs:0 Fs:0 Fs:7}



static void Test_BFu0s_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu7s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu7s, BFu0s_BFu0s_BFu7s)
//============================================================================


struct  BFu0s_BFu0s_BFu8c  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0s_BFu0s_BFu8c) C1{ Fs:0 Fs:0 Fc:8}



static void Test_BFu0s_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu8c");
    static STRUCT_IF_C BFu0s_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu8c, BFu0s_BFu0s_BFu8c)
//============================================================================


struct  BFu0s_BFu0s_BFu8i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0s_BFu0s_BFu8i) C1{ Fs:0 Fs:0 Fi:8}



static void Test_BFu0s_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu8i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu8i, BFu0s_BFu0s_BFu8i)
//============================================================================


struct  BFu0s_BFu0s_BFu8ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0s_BFu0s_BFu8ll) C1{ Fs:0 Fs:0 FL:8}



static void Test_BFu0s_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu8ll, BFu0s_BFu0s_BFu8ll)
//============================================================================


struct  BFu0s_BFu0s_BFu8s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0s_BFu0s_BFu8s) C1{ Fs:0 Fs:0 Fs:8}



static void Test_BFu0s_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu8s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu8s, BFu0s_BFu0s_BFu8s)
//============================================================================


struct  BFu0s_BFu0s_BFu9i  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0s_BFu0s_BFu9i) C1{ Fs:0 Fs:0 Fi:9}



static void Test_BFu0s_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu9i");
    static STRUCT_IF_C BFu0s_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu9i, BFu0s_BFu0s_BFu9i)
//============================================================================


struct  BFu0s_BFu0s_BFu9ll  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0s_BFu0s_BFu9ll) C1{ Fs:0 Fs:0 FL:9}



static void Test_BFu0s_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu9ll, BFu0s_BFu0s_BFu9ll)
//============================================================================


struct  BFu0s_BFu0s_BFu9s  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0s_BFu0s_BFu9s) C1{ Fs:0 Fs:0 Fs:9}



static void Test_BFu0s_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu0s_BFu9s");
    static STRUCT_IF_C BFu0s_BFu0s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_BFu9s, BFu0s_BFu0s_BFu9s)
//============================================================================


struct  BFu0s_BFu0s_C  {
  unsigned short  :0;
  unsigned short  :0;
  char v1;
};
//SIG(1 BFu0s_BFu0s_C) C1{ Fs:0 Fs:0 Fc}



static void Test_BFu0s_BFu0s_C()
{
  {
    init_simple_test("BFu0s_BFu0s_C");
    static STRUCT_IF_C BFu0s_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_C)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_C.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_C, BFu0s_BFu0s_C)
//============================================================================


struct  BFu0s_BFu0s_D  {
  unsigned short  :0;
  unsigned short  :0;
  double v1;
};
//SIG(1 BFu0s_BFu0s_D) C1{ Fs:0 Fs:0 FL}



static void Test_BFu0s_BFu0s_D()
{
  {
    init_simple_test("BFu0s_BFu0s_D");
    static STRUCT_IF_C BFu0s_BFu0s_D lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_D)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_D.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_D, BFu0s_BFu0s_D)
//============================================================================


struct  BFu0s_BFu0s_F  {
  unsigned short  :0;
  unsigned short  :0;
  float v1;
};
//SIG(1 BFu0s_BFu0s_F) C1{ Fs:0 Fs:0 Fi}



static void Test_BFu0s_BFu0s_F()
{
  {
    init_simple_test("BFu0s_BFu0s_F");
    static STRUCT_IF_C BFu0s_BFu0s_F lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_F)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_F.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_F, BFu0s_BFu0s_F)
//============================================================================


struct  BFu0s_BFu0s_I  {
  unsigned short  :0;
  unsigned short  :0;
  int v1;
};
//SIG(1 BFu0s_BFu0s_I) C1{ Fs:0 Fs:0 Fi}



static void Test_BFu0s_BFu0s_I()
{
  {
    init_simple_test("BFu0s_BFu0s_I");
    static STRUCT_IF_C BFu0s_BFu0s_I lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_I)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_I.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_I, BFu0s_BFu0s_I)
//============================================================================


struct  BFu0s_BFu0s_Ip  {
  unsigned short  :0;
  unsigned short  :0;
  int *v1;
};
//SIG(1 BFu0s_BFu0s_Ip) C1{ Fs:0 Fs:0 Fp}



static void Test_BFu0s_BFu0s_Ip()
{
  {
    init_simple_test("BFu0s_BFu0s_Ip");
    static STRUCT_IF_C BFu0s_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_Ip.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_Ip, BFu0s_BFu0s_Ip)
//============================================================================


struct  BFu0s_BFu0s_L  {
  unsigned short  :0;
  unsigned short  :0;
  __tsi64 v1;
};
//SIG(1 BFu0s_BFu0s_L) C1{ Fs:0 Fs:0 FL}



static void Test_BFu0s_BFu0s_L()
{
  {
    init_simple_test("BFu0s_BFu0s_L");
    static STRUCT_IF_C BFu0s_BFu0s_L lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_L)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_L.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_L, BFu0s_BFu0s_L)
//============================================================================


struct  BFu0s_BFu0s_S  {
  unsigned short  :0;
  unsigned short  :0;
  short v1;
};
//SIG(1 BFu0s_BFu0s_S) C1{ Fs:0 Fs:0 Fs}



static void Test_BFu0s_BFu0s_S()
{
  {
    init_simple_test("BFu0s_BFu0s_S");
    static STRUCT_IF_C BFu0s_BFu0s_S lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0s_S)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_S.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_S, BFu0s_BFu0s_S)
//============================================================================


struct  BFu0s_BFu0s_Uc  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned char v1;
};
//SIG(1 BFu0s_BFu0s_Uc) C1{ Fs:0 Fs:0 Fc}



static void Test_BFu0s_BFu0s_Uc()
{
  {
    init_simple_test("BFu0s_BFu0s_Uc");
    static STRUCT_IF_C BFu0s_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_Uc.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_Uc, BFu0s_BFu0s_Uc)
//============================================================================


struct  BFu0s_BFu0s_Ui  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned int v1;
};
//SIG(1 BFu0s_BFu0s_Ui) C1{ Fs:0 Fs:0 Fi}



static void Test_BFu0s_BFu0s_Ui()
{
  {
    init_simple_test("BFu0s_BFu0s_Ui");
    static STRUCT_IF_C BFu0s_BFu0s_Ui lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_Ui.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_Ui, BFu0s_BFu0s_Ui)
//============================================================================


struct  BFu0s_BFu0s_Ul  {
  unsigned short  :0;
  unsigned short  :0;
  __tsu64 v1;
};
//SIG(1 BFu0s_BFu0s_Ul) C1{ Fs:0 Fs:0 FL}



static void Test_BFu0s_BFu0s_Ul()
{
  {
    init_simple_test("BFu0s_BFu0s_Ul");
    static STRUCT_IF_C BFu0s_BFu0s_Ul lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_Ul.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_Ul, BFu0s_BFu0s_Ul)
//============================================================================


struct  BFu0s_BFu0s_Us  {
  unsigned short  :0;
  unsigned short  :0;
  unsigned short v1;
};
//SIG(1 BFu0s_BFu0s_Us) C1{ Fs:0 Fs:0 Fs}



static void Test_BFu0s_BFu0s_Us()
{
  {
    init_simple_test("BFu0s_BFu0s_Us");
    static STRUCT_IF_C BFu0s_BFu0s_Us lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_Us.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_Us, BFu0s_BFu0s_Us)
//============================================================================


struct  BFu0s_BFu0s_Vp  {
  unsigned short  :0;
  unsigned short  :0;
  void *v1;
};
//SIG(1 BFu0s_BFu0s_Vp) C1{ Fs:0 Fs:0 Fp}



static void Test_BFu0s_BFu0s_Vp()
{
  {
    init_simple_test("BFu0s_BFu0s_Vp");
    static STRUCT_IF_C BFu0s_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "BFu0s_BFu0s_Vp.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu0s_Vp, BFu0s_BFu0s_Vp)
//============================================================================


struct  BFu0s_BFu15i  {
  unsigned short  :0;
  unsigned int v1:15;
};
//SIG(1 BFu0s_BFu15i) C1{ Fs:0 Fi:15}



static void Test_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu15i");
    static STRUCT_IF_C BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i, BFu0s_BFu15i)
//============================================================================


struct  BFu0s_BFu15i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu15i_BFu0c) C1{ Fs:0 Fi:15 Fc:0}



static void Test_BFu0s_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu0c, BFu0s_BFu15i_BFu0c)
//============================================================================


struct  BFu0s_BFu15i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu15i_BFu0i) C1{ Fs:0 Fi:15 Fi:0}



static void Test_BFu0s_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu0i, BFu0s_BFu15i_BFu0i)
//============================================================================


struct  BFu0s_BFu15i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu15i_BFu0ll) C1{ Fs:0 Fi:15 FL:0}



static void Test_BFu0s_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu0ll, BFu0s_BFu15i_BFu0ll)
//============================================================================


struct  BFu0s_BFu15i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu15i_BFu0s) C1{ Fs:0 Fi:15 Fs:0}



static void Test_BFu0s_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu0s, BFu0s_BFu15i_BFu0s)
//============================================================================


struct  BFu0s_BFu15i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu15i_BFu15i) C1{ Fs:0 Fi:15 Fi:15}



static void Test_BFu0s_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu15i, BFu0s_BFu15i_BFu15i)
//============================================================================


struct  BFu0s_BFu15i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu15i_BFu15ll) C1{ Fs:0 Fi:15 FL:15}



static void Test_BFu0s_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu15ll, BFu0s_BFu15i_BFu15ll)
//============================================================================


struct  BFu0s_BFu15i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu15i_BFu15s) C1{ Fs:0 Fi:15 Fs:15}



static void Test_BFu0s_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu15i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu15s, BFu0s_BFu15i_BFu15s)
//============================================================================


struct  BFu0s_BFu15i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu15i_BFu16i) C1{ Fs:0 Fi:15 Fi:16}



static void Test_BFu0s_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0s_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu16i, BFu0s_BFu15i_BFu16i)
//============================================================================


struct  BFu0s_BFu15i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu15i_BFu16ll) C1{ Fs:0 Fi:15 FL:16}



static void Test_BFu0s_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu16ll, BFu0s_BFu15i_BFu16ll)
//============================================================================


struct  BFu0s_BFu15i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu15i_BFu16s) C1{ Fs:0 Fi:15 Fs:16}



static void Test_BFu0s_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu15i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu16s, BFu0s_BFu15i_BFu16s)
//============================================================================


struct  BFu0s_BFu15i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu15i_BFu17i) C1{ Fs:0 Fi:15 Fi:17}



static void Test_BFu0s_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0s_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu17i, BFu0s_BFu15i_BFu17i)
//============================================================================


struct  BFu0s_BFu15i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu15i_BFu17ll) C1{ Fs:0 Fi:15 FL:17}



static void Test_BFu0s_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu17ll, BFu0s_BFu15i_BFu17ll)
//============================================================================


struct  BFu0s_BFu15i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu15i_BFu1c) C1{ Fs:0 Fi:15 Fc:1}



static void Test_BFu0s_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu1c, BFu0s_BFu15i_BFu1c)
//============================================================================


struct  BFu0s_BFu15i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu15i_BFu1i) C1{ Fs:0 Fi:15 Fi:1}



static void Test_BFu0s_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu1i, BFu0s_BFu15i_BFu1i)
//============================================================================


struct  BFu0s_BFu15i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu15i_BFu1ll) C1{ Fs:0 Fi:15 FL:1}



static void Test_BFu0s_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu1ll, BFu0s_BFu15i_BFu1ll)
//============================================================================


struct  BFu0s_BFu15i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu15i_BFu1s) C1{ Fs:0 Fi:15 Fs:1}



static void Test_BFu0s_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu1s, BFu0s_BFu15i_BFu1s)
//============================================================================


struct  BFu0s_BFu15i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu15i_BFu31i) C1{ Fs:0 Fi:15 Fi:31}



static void Test_BFu0s_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu31i, BFu0s_BFu15i_BFu31i)
//============================================================================


struct  BFu0s_BFu15i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu15i_BFu31ll) C1{ Fs:0 Fi:15 FL:31}



static void Test_BFu0s_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu31ll, BFu0s_BFu15i_BFu31ll)
//============================================================================


struct  BFu0s_BFu15i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu15i_BFu32i) C1{ Fs:0 Fi:15 Fi:32}



static void Test_BFu0s_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu32i, BFu0s_BFu15i_BFu32i)
//============================================================================


struct  BFu0s_BFu15i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu15i_BFu32ll) C1{ Fs:0 Fi:15 FL:32}



static void Test_BFu0s_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu32ll, BFu0s_BFu15i_BFu32ll)
//============================================================================


struct  BFu0s_BFu15i_BFu33  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu15i_BFu33) C1{ Fs:0 Fi:15 FL:33}



static void Test_BFu0s_BFu15i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu33");
    static STRUCT_IF_C BFu0s_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0s_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu33, BFu0s_BFu15i_BFu33)
//============================================================================


struct  BFu0s_BFu15i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu15i_BFu7c) C1{ Fs:0 Fi:15 Fc:7}



static void Test_BFu0s_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu7c, BFu0s_BFu15i_BFu7c)
//============================================================================


struct  BFu0s_BFu15i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu15i_BFu7i) C1{ Fs:0 Fi:15 Fi:7}



static void Test_BFu0s_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0s_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu7i, BFu0s_BFu15i_BFu7i)
//============================================================================


struct  BFu0s_BFu15i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu15i_BFu7ll) C1{ Fs:0 Fi:15 FL:7}



static void Test_BFu0s_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu7ll, BFu0s_BFu15i_BFu7ll)
//============================================================================


struct  BFu0s_BFu15i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu15i_BFu7s) C1{ Fs:0 Fi:15 Fs:7}



static void Test_BFu0s_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu7s, BFu0s_BFu15i_BFu7s)
//============================================================================


struct  BFu0s_BFu15i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu15i_BFu8c) C1{ Fs:0 Fi:15 Fc:8}



static void Test_BFu0s_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu8c, BFu0s_BFu15i_BFu8c)
//============================================================================


struct  BFu0s_BFu15i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu15i_BFu8i) C1{ Fs:0 Fi:15 Fi:8}



static void Test_BFu0s_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0s_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu8i, BFu0s_BFu15i_BFu8i)
//============================================================================


struct  BFu0s_BFu15i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu15i_BFu8ll) C1{ Fs:0 Fi:15 FL:8}



static void Test_BFu0s_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu8ll, BFu0s_BFu15i_BFu8ll)
//============================================================================


struct  BFu0s_BFu15i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu15i_BFu8s) C1{ Fs:0 Fi:15 Fs:8}



static void Test_BFu0s_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu8s, BFu0s_BFu15i_BFu8s)
//============================================================================


struct  BFu0s_BFu15i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu15i_BFu9i) C1{ Fs:0 Fi:15 Fi:9}



static void Test_BFu0s_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0s_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu9i, BFu0s_BFu15i_BFu9i)
//============================================================================


struct  BFu0s_BFu15i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu15i_BFu9ll) C1{ Fs:0 Fi:15 FL:9}



static void Test_BFu0s_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu9ll, BFu0s_BFu15i_BFu9ll)
//============================================================================


struct  BFu0s_BFu15i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu15i_BFu9s) C1{ Fs:0 Fi:15 Fs:9}



static void Test_BFu0s_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu15i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_BFu9s, BFu0s_BFu15i_BFu9s)
//============================================================================


struct  BFu0s_BFu15i_C  {
  unsigned short  :0;
  unsigned int v1:15;
  char v2;
};
//SIG(1 BFu0s_BFu15i_C) C1{ Fs:0 Fi:15 Fc}



static void Test_BFu0s_BFu15i_C()
{
  {
    init_simple_test("BFu0s_BFu15i_C");
    static STRUCT_IF_C BFu0s_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_C, BFu0s_BFu15i_C)
//============================================================================


struct  BFu0s_BFu15i_D  {
  unsigned short  :0;
  unsigned int v1:15;
  double v2;
};
//SIG(1 BFu0s_BFu15i_D) C1{ Fs:0 Fi:15 FL}



static void Test_BFu0s_BFu15i_D()
{
  {
    init_simple_test("BFu0s_BFu15i_D");
    static STRUCT_IF_C BFu0s_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_D, BFu0s_BFu15i_D)
//============================================================================


struct  BFu0s_BFu15i_F  {
  unsigned short  :0;
  unsigned int v1:15;
  float v2;
};
//SIG(1 BFu0s_BFu15i_F) C1{ Fs:0 Fi:15 Fi}



static void Test_BFu0s_BFu15i_F()
{
  {
    init_simple_test("BFu0s_BFu15i_F");
    static STRUCT_IF_C BFu0s_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_F, BFu0s_BFu15i_F)
//============================================================================


struct  BFu0s_BFu15i_I  {
  unsigned short  :0;
  unsigned int v1:15;
  int v2;
};
//SIG(1 BFu0s_BFu15i_I) C1{ Fs:0 Fi:15 Fi}



static void Test_BFu0s_BFu15i_I()
{
  {
    init_simple_test("BFu0s_BFu15i_I");
    static STRUCT_IF_C BFu0s_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_I, BFu0s_BFu15i_I)
//============================================================================


struct  BFu0s_BFu15i_Ip  {
  unsigned short  :0;
  unsigned int v1:15;
  int *v2;
};
//SIG(1 BFu0s_BFu15i_Ip) C1{ Fs:0 Fi:15 Fp}



static void Test_BFu0s_BFu15i_Ip()
{
  {
    init_simple_test("BFu0s_BFu15i_Ip");
    static STRUCT_IF_C BFu0s_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_Ip, BFu0s_BFu15i_Ip)
//============================================================================


struct  BFu0s_BFu15i_L  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu15i_L) C1{ Fs:0 Fi:15 FL}



static void Test_BFu0s_BFu15i_L()
{
  {
    init_simple_test("BFu0s_BFu15i_L");
    static STRUCT_IF_C BFu0s_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_L, BFu0s_BFu15i_L)
//============================================================================


struct  BFu0s_BFu15i_S  {
  unsigned short  :0;
  unsigned int v1:15;
  short v2;
};
//SIG(1 BFu0s_BFu15i_S) C1{ Fs:0 Fi:15 Fs}



static void Test_BFu0s_BFu15i_S()
{
  {
    init_simple_test("BFu0s_BFu15i_S");
    static STRUCT_IF_C BFu0s_BFu15i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_S, BFu0s_BFu15i_S)
//============================================================================


struct  BFu0s_BFu15i_Uc  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu15i_Uc) C1{ Fs:0 Fi:15 Fc}



static void Test_BFu0s_BFu15i_Uc()
{
  {
    init_simple_test("BFu0s_BFu15i_Uc");
    static STRUCT_IF_C BFu0s_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_Uc, BFu0s_BFu15i_Uc)
//============================================================================


struct  BFu0s_BFu15i_Ui  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu15i_Ui) C1{ Fs:0 Fi:15 Fi}



static void Test_BFu0s_BFu15i_Ui()
{
  {
    init_simple_test("BFu0s_BFu15i_Ui");
    static STRUCT_IF_C BFu0s_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_Ui, BFu0s_BFu15i_Ui)
//============================================================================


struct  BFu0s_BFu15i_Ul  {
  unsigned short  :0;
  unsigned int v1:15;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu15i_Ul) C1{ Fs:0 Fi:15 FL}



static void Test_BFu0s_BFu15i_Ul()
{
  {
    init_simple_test("BFu0s_BFu15i_Ul");
    static STRUCT_IF_C BFu0s_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_Ul, BFu0s_BFu15i_Ul)
//============================================================================


struct  BFu0s_BFu15i_Us  {
  unsigned short  :0;
  unsigned int v1:15;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu15i_Us) C1{ Fs:0 Fi:15 Fs}



static void Test_BFu0s_BFu15i_Us()
{
  {
    init_simple_test("BFu0s_BFu15i_Us");
    static STRUCT_IF_C BFu0s_BFu15i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_Us, BFu0s_BFu15i_Us)
//============================================================================


struct  BFu0s_BFu15i_Vp  {
  unsigned short  :0;
  unsigned int v1:15;
  void *v2;
};
//SIG(1 BFu0s_BFu15i_Vp) C1{ Fs:0 Fi:15 Fp}



static void Test_BFu0s_BFu15i_Vp()
{
  {
    init_simple_test("BFu0s_BFu15i_Vp");
    static STRUCT_IF_C BFu0s_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15i_Vp, BFu0s_BFu15i_Vp)
//============================================================================


struct  BFu0s_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:15;
};
//SIG(1 BFu0s_BFu15ll) C1{ Fs:0 FL:15}



static void Test_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll, BFu0s_BFu15ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu15ll_BFu0c) C1{ Fs:0 FL:15 Fc:0}



static void Test_BFu0s_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu0c, BFu0s_BFu15ll_BFu0c)
//============================================================================


struct  BFu0s_BFu15ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu15ll_BFu0i) C1{ Fs:0 FL:15 Fi:0}



static void Test_BFu0s_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu0i, BFu0s_BFu15ll_BFu0i)
//============================================================================


struct  BFu0s_BFu15ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu15ll_BFu0ll) C1{ Fs:0 FL:15 FL:0}



static void Test_BFu0s_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu0ll, BFu0s_BFu15ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu15ll_BFu0s) C1{ Fs:0 FL:15 Fs:0}



static void Test_BFu0s_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu0s, BFu0s_BFu15ll_BFu0s)
//============================================================================


struct  BFu0s_BFu15ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu15ll_BFu15i) C1{ Fs:0 FL:15 Fi:15}



static void Test_BFu0s_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu15i, BFu0s_BFu15ll_BFu15i)
//============================================================================


struct  BFu0s_BFu15ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu15ll_BFu15ll) C1{ Fs:0 FL:15 FL:15}



static void Test_BFu0s_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu15ll, BFu0s_BFu15ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu15ll_BFu15s) C1{ Fs:0 FL:15 Fs:15}



static void Test_BFu0s_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu15s, BFu0s_BFu15ll_BFu15s)
//============================================================================


struct  BFu0s_BFu15ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu15ll_BFu16i) C1{ Fs:0 FL:15 Fi:16}



static void Test_BFu0s_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu16i, BFu0s_BFu15ll_BFu16i)
//============================================================================


struct  BFu0s_BFu15ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu15ll_BFu16ll) C1{ Fs:0 FL:15 FL:16}



static void Test_BFu0s_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu16ll, BFu0s_BFu15ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu15ll_BFu16s) C1{ Fs:0 FL:15 Fs:16}



static void Test_BFu0s_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu16s, BFu0s_BFu15ll_BFu16s)
//============================================================================


struct  BFu0s_BFu15ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu15ll_BFu17i) C1{ Fs:0 FL:15 Fi:17}



static void Test_BFu0s_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu17i, BFu0s_BFu15ll_BFu17i)
//============================================================================


struct  BFu0s_BFu15ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu15ll_BFu17ll) C1{ Fs:0 FL:15 FL:17}



static void Test_BFu0s_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu17ll, BFu0s_BFu15ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu15ll_BFu1c) C1{ Fs:0 FL:15 Fc:1}



static void Test_BFu0s_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu1c, BFu0s_BFu15ll_BFu1c)
//============================================================================


struct  BFu0s_BFu15ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu15ll_BFu1i) C1{ Fs:0 FL:15 Fi:1}



static void Test_BFu0s_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu1i, BFu0s_BFu15ll_BFu1i)
//============================================================================


struct  BFu0s_BFu15ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu15ll_BFu1ll) C1{ Fs:0 FL:15 FL:1}



static void Test_BFu0s_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu1ll, BFu0s_BFu15ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu15ll_BFu1s) C1{ Fs:0 FL:15 Fs:1}



static void Test_BFu0s_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu1s, BFu0s_BFu15ll_BFu1s)
//============================================================================


struct  BFu0s_BFu15ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu15ll_BFu31i) C1{ Fs:0 FL:15 Fi:31}



static void Test_BFu0s_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu31i, BFu0s_BFu15ll_BFu31i)
//============================================================================


struct  BFu0s_BFu15ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu15ll_BFu31ll) C1{ Fs:0 FL:15 FL:31}



static void Test_BFu0s_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu31ll, BFu0s_BFu15ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu15ll_BFu32i) C1{ Fs:0 FL:15 Fi:32}



static void Test_BFu0s_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu32i, BFu0s_BFu15ll_BFu32i)
//============================================================================


struct  BFu0s_BFu15ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu15ll_BFu32ll) C1{ Fs:0 FL:15 FL:32}



static void Test_BFu0s_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu32ll, BFu0s_BFu15ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu15ll_BFu33) C1{ Fs:0 FL:15 FL:33}



static void Test_BFu0s_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0s_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu33, BFu0s_BFu15ll_BFu33)
//============================================================================


struct  BFu0s_BFu15ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu15ll_BFu7c) C1{ Fs:0 FL:15 Fc:7}



static void Test_BFu0s_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu7c, BFu0s_BFu15ll_BFu7c)
//============================================================================


struct  BFu0s_BFu15ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu15ll_BFu7i) C1{ Fs:0 FL:15 Fi:7}



static void Test_BFu0s_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu7i, BFu0s_BFu15ll_BFu7i)
//============================================================================


struct  BFu0s_BFu15ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu15ll_BFu7ll) C1{ Fs:0 FL:15 FL:7}



static void Test_BFu0s_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu7ll, BFu0s_BFu15ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu15ll_BFu7s) C1{ Fs:0 FL:15 Fs:7}



static void Test_BFu0s_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu7s, BFu0s_BFu15ll_BFu7s)
//============================================================================


struct  BFu0s_BFu15ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu15ll_BFu8c) C1{ Fs:0 FL:15 Fc:8}



static void Test_BFu0s_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu8c, BFu0s_BFu15ll_BFu8c)
//============================================================================


struct  BFu0s_BFu15ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu15ll_BFu8i) C1{ Fs:0 FL:15 Fi:8}



static void Test_BFu0s_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu8i, BFu0s_BFu15ll_BFu8i)
//============================================================================


struct  BFu0s_BFu15ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu15ll_BFu8ll) C1{ Fs:0 FL:15 FL:8}



static void Test_BFu0s_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu8ll, BFu0s_BFu15ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu15ll_BFu8s) C1{ Fs:0 FL:15 Fs:8}



static void Test_BFu0s_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu8s, BFu0s_BFu15ll_BFu8s)
//============================================================================


struct  BFu0s_BFu15ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu15ll_BFu9i) C1{ Fs:0 FL:15 Fi:9}



static void Test_BFu0s_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu9i, BFu0s_BFu15ll_BFu9i)
//============================================================================


struct  BFu0s_BFu15ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu15ll_BFu9ll) C1{ Fs:0 FL:15 FL:9}



static void Test_BFu0s_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu9ll, BFu0s_BFu15ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu15ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu15ll_BFu9s) C1{ Fs:0 FL:15 Fs:9}



static void Test_BFu0s_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_BFu9s, BFu0s_BFu15ll_BFu9s)
//============================================================================


struct  BFu0s_BFu15ll_C  {
  unsigned short  :0;
  __tsu64 v1:15;
  char v2;
};
//SIG(1 BFu0s_BFu15ll_C) C1{ Fs:0 FL:15 Fc}



static void Test_BFu0s_BFu15ll_C()
{
  {
    init_simple_test("BFu0s_BFu15ll_C");
    static STRUCT_IF_C BFu0s_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_C, BFu0s_BFu15ll_C)
//============================================================================


struct  BFu0s_BFu15ll_D  {
  unsigned short  :0;
  __tsu64 v1:15;
  double v2;
};
//SIG(1 BFu0s_BFu15ll_D) C1{ Fs:0 FL:15 FL}



static void Test_BFu0s_BFu15ll_D()
{
  {
    init_simple_test("BFu0s_BFu15ll_D");
    static STRUCT_IF_C BFu0s_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_D, BFu0s_BFu15ll_D)
//============================================================================


struct  BFu0s_BFu15ll_F  {
  unsigned short  :0;
  __tsu64 v1:15;
  float v2;
};
//SIG(1 BFu0s_BFu15ll_F) C1{ Fs:0 FL:15 Fi}



static void Test_BFu0s_BFu15ll_F()
{
  {
    init_simple_test("BFu0s_BFu15ll_F");
    static STRUCT_IF_C BFu0s_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_F, BFu0s_BFu15ll_F)
//============================================================================


struct  BFu0s_BFu15ll_I  {
  unsigned short  :0;
  __tsu64 v1:15;
  int v2;
};
//SIG(1 BFu0s_BFu15ll_I) C1{ Fs:0 FL:15 Fi}



static void Test_BFu0s_BFu15ll_I()
{
  {
    init_simple_test("BFu0s_BFu15ll_I");
    static STRUCT_IF_C BFu0s_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_I, BFu0s_BFu15ll_I)
//============================================================================


struct  BFu0s_BFu15ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:15;
  int *v2;
};
//SIG(1 BFu0s_BFu15ll_Ip) C1{ Fs:0 FL:15 Fp}



static void Test_BFu0s_BFu15ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu15ll_Ip");
    static STRUCT_IF_C BFu0s_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_Ip, BFu0s_BFu15ll_Ip)
//============================================================================


struct  BFu0s_BFu15ll_L  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu15ll_L) C1{ Fs:0 FL:15 FL}



static void Test_BFu0s_BFu15ll_L()
{
  {
    init_simple_test("BFu0s_BFu15ll_L");
    static STRUCT_IF_C BFu0s_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_L, BFu0s_BFu15ll_L)
//============================================================================


struct  BFu0s_BFu15ll_S  {
  unsigned short  :0;
  __tsu64 v1:15;
  short v2;
};
//SIG(1 BFu0s_BFu15ll_S) C1{ Fs:0 FL:15 Fs}



static void Test_BFu0s_BFu15ll_S()
{
  {
    init_simple_test("BFu0s_BFu15ll_S");
    static STRUCT_IF_C BFu0s_BFu15ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_S, BFu0s_BFu15ll_S)
//============================================================================


struct  BFu0s_BFu15ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu15ll_Uc) C1{ Fs:0 FL:15 Fc}



static void Test_BFu0s_BFu15ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu15ll_Uc");
    static STRUCT_IF_C BFu0s_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_Uc, BFu0s_BFu15ll_Uc)
//============================================================================


struct  BFu0s_BFu15ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu15ll_Ui) C1{ Fs:0 FL:15 Fi}



static void Test_BFu0s_BFu15ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu15ll_Ui");
    static STRUCT_IF_C BFu0s_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_Ui, BFu0s_BFu15ll_Ui)
//============================================================================


struct  BFu0s_BFu15ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:15;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu15ll_Ul) C1{ Fs:0 FL:15 FL}



static void Test_BFu0s_BFu15ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu15ll_Ul");
    static STRUCT_IF_C BFu0s_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_Ul, BFu0s_BFu15ll_Ul)
//============================================================================


struct  BFu0s_BFu15ll_Us  {
  unsigned short  :0;
  __tsu64 v1:15;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu15ll_Us) C1{ Fs:0 FL:15 Fs}



static void Test_BFu0s_BFu15ll_Us()
{
  {
    init_simple_test("BFu0s_BFu15ll_Us");
    static STRUCT_IF_C BFu0s_BFu15ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_Us, BFu0s_BFu15ll_Us)
//============================================================================


struct  BFu0s_BFu15ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:15;
  void *v2;
};
//SIG(1 BFu0s_BFu15ll_Vp) C1{ Fs:0 FL:15 Fp}



static void Test_BFu0s_BFu15ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu15ll_Vp");
    static STRUCT_IF_C BFu0s_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15ll_Vp, BFu0s_BFu15ll_Vp)
//============================================================================


struct  BFu0s_BFu15s  {
  unsigned short  :0;
  unsigned short v1:15;
};
//SIG(1 BFu0s_BFu15s) C1{ Fs:0 Fs:15}



static void Test_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu15s");
    static STRUCT_IF_C BFu0s_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s, BFu0s_BFu15s)
//============================================================================


struct  BFu0s_BFu15s_BFu0c  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu15s_BFu0c) C1{ Fs:0 Fs:15 Fc:0}



static void Test_BFu0s_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu15s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu0c, BFu0s_BFu15s_BFu0c)
//============================================================================


struct  BFu0s_BFu15s_BFu0i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu15s_BFu0i) C1{ Fs:0 Fs:15 Fi:0}



static void Test_BFu0s_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu0i, BFu0s_BFu15s_BFu0i)
//============================================================================


struct  BFu0s_BFu15s_BFu0ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu15s_BFu0ll) C1{ Fs:0 Fs:15 FL:0}



static void Test_BFu0s_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu0ll, BFu0s_BFu15s_BFu0ll)
//============================================================================


struct  BFu0s_BFu15s_BFu0s  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu15s_BFu0s) C1{ Fs:0 Fs:15 Fs:0}



static void Test_BFu0s_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu15s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu0s, BFu0s_BFu15s_BFu0s)
//============================================================================


struct  BFu0s_BFu15s_BFu15i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu15s_BFu15i) C1{ Fs:0 Fs:15 Fi:15}



static void Test_BFu0s_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu15i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu15i, BFu0s_BFu15s_BFu15i)
//============================================================================


struct  BFu0s_BFu15s_BFu15ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu15s_BFu15ll) C1{ Fs:0 Fs:15 FL:15}



static void Test_BFu0s_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu0s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu15ll, BFu0s_BFu15s_BFu15ll)
//============================================================================


struct  BFu0s_BFu15s_BFu15s  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu15s_BFu15s) C1{ Fs:0 Fs:15 Fs:15}



static void Test_BFu0s_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu15s");
    static STRUCT_IF_C BFu0s_BFu15s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu15s, BFu0s_BFu15s_BFu15s)
//============================================================================


struct  BFu0s_BFu15s_BFu16i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu15s_BFu16i) C1{ Fs:0 Fs:15 Fi:16}



static void Test_BFu0s_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu16i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0s_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu16i, BFu0s_BFu15s_BFu16i)
//============================================================================


struct  BFu0s_BFu15s_BFu16ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu15s_BFu16ll) C1{ Fs:0 Fs:15 FL:16}



static void Test_BFu0s_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu0s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu16ll, BFu0s_BFu15s_BFu16ll)
//============================================================================


struct  BFu0s_BFu15s_BFu16s  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu15s_BFu16s) C1{ Fs:0 Fs:15 Fs:16}



static void Test_BFu0s_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu16s");
    static STRUCT_IF_C BFu0s_BFu15s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu16s, BFu0s_BFu15s_BFu16s)
//============================================================================


struct  BFu0s_BFu15s_BFu17i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu15s_BFu17i) C1{ Fs:0 Fs:15 Fi:17}



static void Test_BFu0s_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu17i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0s_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu17i, BFu0s_BFu15s_BFu17i)
//============================================================================


struct  BFu0s_BFu15s_BFu17ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu15s_BFu17ll) C1{ Fs:0 Fs:15 FL:17}



static void Test_BFu0s_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu0s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu17ll, BFu0s_BFu15s_BFu17ll)
//============================================================================


struct  BFu0s_BFu15s_BFu1c  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu15s_BFu1c) C1{ Fs:0 Fs:15 Fc:1}



static void Test_BFu0s_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu1c");
    static STRUCT_IF_C BFu0s_BFu15s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu15s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu1c, BFu0s_BFu15s_BFu1c)
//============================================================================


struct  BFu0s_BFu15s_BFu1i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu15s_BFu1i) C1{ Fs:0 Fs:15 Fi:1}



static void Test_BFu0s_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu1i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu1i, BFu0s_BFu15s_BFu1i)
//============================================================================


struct  BFu0s_BFu15s_BFu1ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu15s_BFu1ll) C1{ Fs:0 Fs:15 FL:1}



static void Test_BFu0s_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu1ll, BFu0s_BFu15s_BFu1ll)
//============================================================================


struct  BFu0s_BFu15s_BFu1s  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu15s_BFu1s) C1{ Fs:0 Fs:15 Fs:1}



static void Test_BFu0s_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu1s");
    static STRUCT_IF_C BFu0s_BFu15s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu15s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu0s_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu1s, BFu0s_BFu15s_BFu1s)
//============================================================================


struct  BFu0s_BFu15s_BFu31i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu15s_BFu31i) C1{ Fs:0 Fs:15 Fi:31}



static void Test_BFu0s_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu31i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu31i, BFu0s_BFu15s_BFu31i)
//============================================================================


struct  BFu0s_BFu15s_BFu31ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu15s_BFu31ll) C1{ Fs:0 Fs:15 FL:31}



static void Test_BFu0s_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu0s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu31ll, BFu0s_BFu15s_BFu31ll)
//============================================================================


struct  BFu0s_BFu15s_BFu32i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu15s_BFu32i) C1{ Fs:0 Fs:15 Fi:32}



static void Test_BFu0s_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu32i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu32i, BFu0s_BFu15s_BFu32i)
//============================================================================


struct  BFu0s_BFu15s_BFu32ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu15s_BFu32ll) C1{ Fs:0 Fs:15 FL:32}



static void Test_BFu0s_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu0s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu32ll, BFu0s_BFu15s_BFu32ll)
//============================================================================


struct  BFu0s_BFu15s_BFu33  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu15s_BFu33) C1{ Fs:0 Fs:15 FL:33}



static void Test_BFu0s_BFu15s_BFu33()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu33");
    static STRUCT_IF_C BFu0s_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu0s_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu33, BFu0s_BFu15s_BFu33)
//============================================================================


struct  BFu0s_BFu15s_BFu7c  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu15s_BFu7c) C1{ Fs:0 Fs:15 Fc:7}



static void Test_BFu0s_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu7c");
    static STRUCT_IF_C BFu0s_BFu15s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu7c, BFu0s_BFu15s_BFu7c)
//============================================================================


struct  BFu0s_BFu15s_BFu7i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu15s_BFu7i) C1{ Fs:0 Fs:15 Fi:7}



static void Test_BFu0s_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu7i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0s_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu7i, BFu0s_BFu15s_BFu7i)
//============================================================================


struct  BFu0s_BFu15s_BFu7ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu15s_BFu7ll) C1{ Fs:0 Fs:15 FL:7}



static void Test_BFu0s_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu0s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu7ll, BFu0s_BFu15s_BFu7ll)
//============================================================================


struct  BFu0s_BFu15s_BFu7s  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu15s_BFu7s) C1{ Fs:0 Fs:15 Fs:7}



static void Test_BFu0s_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu7s");
    static STRUCT_IF_C BFu0s_BFu15s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu7s, BFu0s_BFu15s_BFu7s)
//============================================================================


struct  BFu0s_BFu15s_BFu8c  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu15s_BFu8c) C1{ Fs:0 Fs:15 Fc:8}



static void Test_BFu0s_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu8c");
    static STRUCT_IF_C BFu0s_BFu15s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu8c, BFu0s_BFu15s_BFu8c)
//============================================================================


struct  BFu0s_BFu15s_BFu8i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu15s_BFu8i) C1{ Fs:0 Fs:15 Fi:8}



static void Test_BFu0s_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu8i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0s_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu8i, BFu0s_BFu15s_BFu8i)
//============================================================================


struct  BFu0s_BFu15s_BFu8ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu15s_BFu8ll) C1{ Fs:0 Fs:15 FL:8}



static void Test_BFu0s_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu0s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu8ll, BFu0s_BFu15s_BFu8ll)
//============================================================================


struct  BFu0s_BFu15s_BFu8s  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu15s_BFu8s) C1{ Fs:0 Fs:15 Fs:8}



static void Test_BFu0s_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu8s");
    static STRUCT_IF_C BFu0s_BFu15s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu8s, BFu0s_BFu15s_BFu8s)
//============================================================================


struct  BFu0s_BFu15s_BFu9i  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu15s_BFu9i) C1{ Fs:0 Fs:15 Fi:9}



static void Test_BFu0s_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu9i");
    static STRUCT_IF_C BFu0s_BFu15s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0s_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu9i, BFu0s_BFu15s_BFu9i)
//============================================================================


struct  BFu0s_BFu15s_BFu9ll  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu15s_BFu9ll) C1{ Fs:0 Fs:15 FL:9}



static void Test_BFu0s_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu15s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu0s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu9ll, BFu0s_BFu15s_BFu9ll)
//============================================================================


struct  BFu0s_BFu15s_BFu9s  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu15s_BFu9s) C1{ Fs:0 Fs:15 Fs:9}



static void Test_BFu0s_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu15s_BFu9s");
    static STRUCT_IF_C BFu0s_BFu15s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_BFu9s, BFu0s_BFu15s_BFu9s)
//============================================================================


struct  BFu0s_BFu15s_C  {
  unsigned short  :0;
  unsigned short v1:15;
  char v2;
};
//SIG(1 BFu0s_BFu15s_C) C1{ Fs:0 Fs:15 Fc}



static void Test_BFu0s_BFu15s_C()
{
  {
    init_simple_test("BFu0s_BFu15s_C");
    static STRUCT_IF_C BFu0s_BFu15s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_C, BFu0s_BFu15s_C)
//============================================================================


struct  BFu0s_BFu15s_D  {
  unsigned short  :0;
  unsigned short v1:15;
  double v2;
};
//SIG(1 BFu0s_BFu15s_D) C1{ Fs:0 Fs:15 FL}



static void Test_BFu0s_BFu15s_D()
{
  {
    init_simple_test("BFu0s_BFu15s_D");
    static STRUCT_IF_C BFu0s_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_D, BFu0s_BFu15s_D)
//============================================================================


struct  BFu0s_BFu15s_F  {
  unsigned short  :0;
  unsigned short v1:15;
  float v2;
};
//SIG(1 BFu0s_BFu15s_F) C1{ Fs:0 Fs:15 Fi}



static void Test_BFu0s_BFu15s_F()
{
  {
    init_simple_test("BFu0s_BFu15s_F");
    static STRUCT_IF_C BFu0s_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_F, BFu0s_BFu15s_F)
//============================================================================


struct  BFu0s_BFu15s_I  {
  unsigned short  :0;
  unsigned short v1:15;
  int v2;
};
//SIG(1 BFu0s_BFu15s_I) C1{ Fs:0 Fs:15 Fi}



static void Test_BFu0s_BFu15s_I()
{
  {
    init_simple_test("BFu0s_BFu15s_I");
    static STRUCT_IF_C BFu0s_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_I, BFu0s_BFu15s_I)
//============================================================================


struct  BFu0s_BFu15s_Ip  {
  unsigned short  :0;
  unsigned short v1:15;
  int *v2;
};
//SIG(1 BFu0s_BFu15s_Ip) C1{ Fs:0 Fs:15 Fp}



static void Test_BFu0s_BFu15s_Ip()
{
  {
    init_simple_test("BFu0s_BFu15s_Ip");
    static STRUCT_IF_C BFu0s_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_Ip, BFu0s_BFu15s_Ip)
//============================================================================


struct  BFu0s_BFu15s_L  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu15s_L) C1{ Fs:0 Fs:15 FL}



static void Test_BFu0s_BFu15s_L()
{
  {
    init_simple_test("BFu0s_BFu15s_L");
    static STRUCT_IF_C BFu0s_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_L, BFu0s_BFu15s_L)
//============================================================================


struct  BFu0s_BFu15s_S  {
  unsigned short  :0;
  unsigned short v1:15;
  short v2;
};
//SIG(1 BFu0s_BFu15s_S) C1{ Fs:0 Fs:15 Fs}



static void Test_BFu0s_BFu15s_S()
{
  {
    init_simple_test("BFu0s_BFu15s_S");
    static STRUCT_IF_C BFu0s_BFu15s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_S, BFu0s_BFu15s_S)
//============================================================================


struct  BFu0s_BFu15s_Uc  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu15s_Uc) C1{ Fs:0 Fs:15 Fc}



static void Test_BFu0s_BFu15s_Uc()
{
  {
    init_simple_test("BFu0s_BFu15s_Uc");
    static STRUCT_IF_C BFu0s_BFu15s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_Uc, BFu0s_BFu15s_Uc)
//============================================================================


struct  BFu0s_BFu15s_Ui  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu15s_Ui) C1{ Fs:0 Fs:15 Fi}



static void Test_BFu0s_BFu15s_Ui()
{
  {
    init_simple_test("BFu0s_BFu15s_Ui");
    static STRUCT_IF_C BFu0s_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu15s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_Ui, BFu0s_BFu15s_Ui)
//============================================================================


struct  BFu0s_BFu15s_Ul  {
  unsigned short  :0;
  unsigned short v1:15;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu15s_Ul) C1{ Fs:0 Fs:15 FL}



static void Test_BFu0s_BFu15s_Ul()
{
  {
    init_simple_test("BFu0s_BFu15s_Ul");
    static STRUCT_IF_C BFu0s_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_Ul, BFu0s_BFu15s_Ul)
//============================================================================


struct  BFu0s_BFu15s_Us  {
  unsigned short  :0;
  unsigned short v1:15;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu15s_Us) C1{ Fs:0 Fs:15 Fs}



static void Test_BFu0s_BFu15s_Us()
{
  {
    init_simple_test("BFu0s_BFu15s_Us");
    static STRUCT_IF_C BFu0s_BFu15s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu15s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu15s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_Us, BFu0s_BFu15s_Us)
//============================================================================


struct  BFu0s_BFu15s_Vp  {
  unsigned short  :0;
  unsigned short v1:15;
  void *v2;
};
//SIG(1 BFu0s_BFu15s_Vp) C1{ Fs:0 Fs:15 Fp}



static void Test_BFu0s_BFu15s_Vp()
{
  {
    init_simple_test("BFu0s_BFu15s_Vp");
    static STRUCT_IF_C BFu0s_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu0s_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu15s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu15s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu15s_Vp, BFu0s_BFu15s_Vp)
//============================================================================


struct  BFu0s_BFu16i  {
  unsigned short  :0;
  unsigned int v1:16;
};
//SIG(1 BFu0s_BFu16i) C1{ Fs:0 Fi:16}



static void Test_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu16i");
    static STRUCT_IF_C BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i, BFu0s_BFu16i)
//============================================================================


struct  BFu0s_BFu16i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu16i_BFu0c) C1{ Fs:0 Fi:16 Fc:0}



static void Test_BFu0s_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu0c, BFu0s_BFu16i_BFu0c)
//============================================================================


struct  BFu0s_BFu16i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu16i_BFu0i) C1{ Fs:0 Fi:16 Fi:0}



static void Test_BFu0s_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu0i, BFu0s_BFu16i_BFu0i)
//============================================================================


struct  BFu0s_BFu16i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu16i_BFu0ll) C1{ Fs:0 Fi:16 FL:0}



static void Test_BFu0s_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu0ll, BFu0s_BFu16i_BFu0ll)
//============================================================================


struct  BFu0s_BFu16i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu16i_BFu0s) C1{ Fs:0 Fi:16 Fs:0}



static void Test_BFu0s_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu0s, BFu0s_BFu16i_BFu0s)
//============================================================================


struct  BFu0s_BFu16i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu16i_BFu15i) C1{ Fs:0 Fi:16 Fi:15}



static void Test_BFu0s_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu15i, BFu0s_BFu16i_BFu15i)
//============================================================================


struct  BFu0s_BFu16i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu16i_BFu15ll) C1{ Fs:0 Fi:16 FL:15}



static void Test_BFu0s_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu15ll, BFu0s_BFu16i_BFu15ll)
//============================================================================


struct  BFu0s_BFu16i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu16i_BFu15s) C1{ Fs:0 Fi:16 Fs:15}



static void Test_BFu0s_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu16i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu15s, BFu0s_BFu16i_BFu15s)
//============================================================================


struct  BFu0s_BFu16i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu16i_BFu16i) C1{ Fs:0 Fi:16 Fi:16}



static void Test_BFu0s_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu16i, BFu0s_BFu16i_BFu16i)
//============================================================================


struct  BFu0s_BFu16i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu16i_BFu16ll) C1{ Fs:0 Fi:16 FL:16}



static void Test_BFu0s_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu16ll, BFu0s_BFu16i_BFu16ll)
//============================================================================


struct  BFu0s_BFu16i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu16i_BFu16s) C1{ Fs:0 Fi:16 Fs:16}



static void Test_BFu0s_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu16i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu16s, BFu0s_BFu16i_BFu16s)
//============================================================================


struct  BFu0s_BFu16i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu16i_BFu17i) C1{ Fs:0 Fi:16 Fi:17}



static void Test_BFu0s_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu17i, BFu0s_BFu16i_BFu17i)
//============================================================================


struct  BFu0s_BFu16i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu16i_BFu17ll) C1{ Fs:0 Fi:16 FL:17}



static void Test_BFu0s_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu17ll, BFu0s_BFu16i_BFu17ll)
//============================================================================


struct  BFu0s_BFu16i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu16i_BFu1c) C1{ Fs:0 Fi:16 Fc:1}



static void Test_BFu0s_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu1c, BFu0s_BFu16i_BFu1c)
//============================================================================


struct  BFu0s_BFu16i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu16i_BFu1i) C1{ Fs:0 Fi:16 Fi:1}



static void Test_BFu0s_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu1i, BFu0s_BFu16i_BFu1i)
//============================================================================


struct  BFu0s_BFu16i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu16i_BFu1ll) C1{ Fs:0 Fi:16 FL:1}



static void Test_BFu0s_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu1ll, BFu0s_BFu16i_BFu1ll)
//============================================================================


struct  BFu0s_BFu16i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu16i_BFu1s) C1{ Fs:0 Fi:16 Fs:1}



static void Test_BFu0s_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu1s, BFu0s_BFu16i_BFu1s)
//============================================================================


struct  BFu0s_BFu16i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu16i_BFu31i) C1{ Fs:0 Fi:16 Fi:31}



static void Test_BFu0s_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu31i, BFu0s_BFu16i_BFu31i)
//============================================================================


struct  BFu0s_BFu16i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu16i_BFu31ll) C1{ Fs:0 Fi:16 FL:31}



static void Test_BFu0s_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu31ll, BFu0s_BFu16i_BFu31ll)
//============================================================================


struct  BFu0s_BFu16i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu16i_BFu32i) C1{ Fs:0 Fi:16 Fi:32}



static void Test_BFu0s_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu32i, BFu0s_BFu16i_BFu32i)
//============================================================================


struct  BFu0s_BFu16i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu16i_BFu32ll) C1{ Fs:0 Fi:16 FL:32}



static void Test_BFu0s_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu32ll, BFu0s_BFu16i_BFu32ll)
//============================================================================


struct  BFu0s_BFu16i_BFu33  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu16i_BFu33) C1{ Fs:0 Fi:16 FL:33}



static void Test_BFu0s_BFu16i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu33");
    static STRUCT_IF_C BFu0s_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0s_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu33, BFu0s_BFu16i_BFu33)
//============================================================================


struct  BFu0s_BFu16i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu16i_BFu7c) C1{ Fs:0 Fi:16 Fc:7}



static void Test_BFu0s_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu7c, BFu0s_BFu16i_BFu7c)
//============================================================================


struct  BFu0s_BFu16i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu16i_BFu7i) C1{ Fs:0 Fi:16 Fi:7}



static void Test_BFu0s_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu7i, BFu0s_BFu16i_BFu7i)
//============================================================================


struct  BFu0s_BFu16i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu16i_BFu7ll) C1{ Fs:0 Fi:16 FL:7}



static void Test_BFu0s_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu7ll, BFu0s_BFu16i_BFu7ll)
//============================================================================


struct  BFu0s_BFu16i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu16i_BFu7s) C1{ Fs:0 Fi:16 Fs:7}



static void Test_BFu0s_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu7s, BFu0s_BFu16i_BFu7s)
//============================================================================


struct  BFu0s_BFu16i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu16i_BFu8c) C1{ Fs:0 Fi:16 Fc:8}



static void Test_BFu0s_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu8c, BFu0s_BFu16i_BFu8c)
//============================================================================


struct  BFu0s_BFu16i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu16i_BFu8i) C1{ Fs:0 Fi:16 Fi:8}



static void Test_BFu0s_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu8i, BFu0s_BFu16i_BFu8i)
//============================================================================


struct  BFu0s_BFu16i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu16i_BFu8ll) C1{ Fs:0 Fi:16 FL:8}



static void Test_BFu0s_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu8ll, BFu0s_BFu16i_BFu8ll)
//============================================================================


struct  BFu0s_BFu16i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu16i_BFu8s) C1{ Fs:0 Fi:16 Fs:8}



static void Test_BFu0s_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu8s, BFu0s_BFu16i_BFu8s)
//============================================================================


struct  BFu0s_BFu16i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu16i_BFu9i) C1{ Fs:0 Fi:16 Fi:9}



static void Test_BFu0s_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu16i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu9i, BFu0s_BFu16i_BFu9i)
//============================================================================


struct  BFu0s_BFu16i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu16i_BFu9ll) C1{ Fs:0 Fi:16 FL:9}



static void Test_BFu0s_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu9ll, BFu0s_BFu16i_BFu9ll)
//============================================================================


struct  BFu0s_BFu16i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu16i_BFu9s) C1{ Fs:0 Fi:16 Fs:9}



static void Test_BFu0s_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu16i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu16i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_BFu9s, BFu0s_BFu16i_BFu9s)
//============================================================================


struct  BFu0s_BFu16i_C  {
  unsigned short  :0;
  unsigned int v1:16;
  char v2;
};
//SIG(1 BFu0s_BFu16i_C) C1{ Fs:0 Fi:16 Fc}



static void Test_BFu0s_BFu16i_C()
{
  {
    init_simple_test("BFu0s_BFu16i_C");
    static STRUCT_IF_C BFu0s_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_C, BFu0s_BFu16i_C)
//============================================================================


struct  BFu0s_BFu16i_D  {
  unsigned short  :0;
  unsigned int v1:16;
  double v2;
};
//SIG(1 BFu0s_BFu16i_D) C1{ Fs:0 Fi:16 FL}



static void Test_BFu0s_BFu16i_D()
{
  {
    init_simple_test("BFu0s_BFu16i_D");
    static STRUCT_IF_C BFu0s_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_D, BFu0s_BFu16i_D)
//============================================================================


struct  BFu0s_BFu16i_F  {
  unsigned short  :0;
  unsigned int v1:16;
  float v2;
};
//SIG(1 BFu0s_BFu16i_F) C1{ Fs:0 Fi:16 Fi}



static void Test_BFu0s_BFu16i_F()
{
  {
    init_simple_test("BFu0s_BFu16i_F");
    static STRUCT_IF_C BFu0s_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_F, BFu0s_BFu16i_F)
//============================================================================


struct  BFu0s_BFu16i_I  {
  unsigned short  :0;
  unsigned int v1:16;
  int v2;
};
//SIG(1 BFu0s_BFu16i_I) C1{ Fs:0 Fi:16 Fi}



static void Test_BFu0s_BFu16i_I()
{
  {
    init_simple_test("BFu0s_BFu16i_I");
    static STRUCT_IF_C BFu0s_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_I, BFu0s_BFu16i_I)
//============================================================================


struct  BFu0s_BFu16i_Ip  {
  unsigned short  :0;
  unsigned int v1:16;
  int *v2;
};
//SIG(1 BFu0s_BFu16i_Ip) C1{ Fs:0 Fi:16 Fp}



static void Test_BFu0s_BFu16i_Ip()
{
  {
    init_simple_test("BFu0s_BFu16i_Ip");
    static STRUCT_IF_C BFu0s_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_Ip, BFu0s_BFu16i_Ip)
//============================================================================


struct  BFu0s_BFu16i_L  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu16i_L) C1{ Fs:0 Fi:16 FL}



static void Test_BFu0s_BFu16i_L()
{
  {
    init_simple_test("BFu0s_BFu16i_L");
    static STRUCT_IF_C BFu0s_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_L, BFu0s_BFu16i_L)
//============================================================================


struct  BFu0s_BFu16i_S  {
  unsigned short  :0;
  unsigned int v1:16;
  short v2;
};
//SIG(1 BFu0s_BFu16i_S) C1{ Fs:0 Fi:16 Fs}



static void Test_BFu0s_BFu16i_S()
{
  {
    init_simple_test("BFu0s_BFu16i_S");
    static STRUCT_IF_C BFu0s_BFu16i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_S, BFu0s_BFu16i_S)
//============================================================================


struct  BFu0s_BFu16i_Uc  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu16i_Uc) C1{ Fs:0 Fi:16 Fc}



static void Test_BFu0s_BFu16i_Uc()
{
  {
    init_simple_test("BFu0s_BFu16i_Uc");
    static STRUCT_IF_C BFu0s_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_Uc, BFu0s_BFu16i_Uc)
//============================================================================


struct  BFu0s_BFu16i_Ui  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu16i_Ui) C1{ Fs:0 Fi:16 Fi}



static void Test_BFu0s_BFu16i_Ui()
{
  {
    init_simple_test("BFu0s_BFu16i_Ui");
    static STRUCT_IF_C BFu0s_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_Ui, BFu0s_BFu16i_Ui)
//============================================================================


struct  BFu0s_BFu16i_Ul  {
  unsigned short  :0;
  unsigned int v1:16;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu16i_Ul) C1{ Fs:0 Fi:16 FL}



static void Test_BFu0s_BFu16i_Ul()
{
  {
    init_simple_test("BFu0s_BFu16i_Ul");
    static STRUCT_IF_C BFu0s_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_Ul, BFu0s_BFu16i_Ul)
//============================================================================


struct  BFu0s_BFu16i_Us  {
  unsigned short  :0;
  unsigned int v1:16;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu16i_Us) C1{ Fs:0 Fi:16 Fs}



static void Test_BFu0s_BFu16i_Us()
{
  {
    init_simple_test("BFu0s_BFu16i_Us");
    static STRUCT_IF_C BFu0s_BFu16i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_Us, BFu0s_BFu16i_Us)
//============================================================================


struct  BFu0s_BFu16i_Vp  {
  unsigned short  :0;
  unsigned int v1:16;
  void *v2;
};
//SIG(1 BFu0s_BFu16i_Vp) C1{ Fs:0 Fi:16 Fp}



static void Test_BFu0s_BFu16i_Vp()
{
  {
    init_simple_test("BFu0s_BFu16i_Vp");
    static STRUCT_IF_C BFu0s_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16i_Vp, BFu0s_BFu16i_Vp)
//============================================================================


struct  BFu0s_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:16;
};
//SIG(1 BFu0s_BFu16ll) C1{ Fs:0 FL:16}



static void Test_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll, BFu0s_BFu16ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu16ll_BFu0c) C1{ Fs:0 FL:16 Fc:0}



static void Test_BFu0s_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu0c, BFu0s_BFu16ll_BFu0c)
//============================================================================


struct  BFu0s_BFu16ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu16ll_BFu0i) C1{ Fs:0 FL:16 Fi:0}



static void Test_BFu0s_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu0i, BFu0s_BFu16ll_BFu0i)
//============================================================================


struct  BFu0s_BFu16ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu16ll_BFu0ll) C1{ Fs:0 FL:16 FL:0}



static void Test_BFu0s_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu0ll, BFu0s_BFu16ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu16ll_BFu0s) C1{ Fs:0 FL:16 Fs:0}



static void Test_BFu0s_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu0s, BFu0s_BFu16ll_BFu0s)
//============================================================================


struct  BFu0s_BFu16ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu16ll_BFu15i) C1{ Fs:0 FL:16 Fi:15}



static void Test_BFu0s_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu15i, BFu0s_BFu16ll_BFu15i)
//============================================================================


struct  BFu0s_BFu16ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu16ll_BFu15ll) C1{ Fs:0 FL:16 FL:15}



static void Test_BFu0s_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu15ll, BFu0s_BFu16ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu16ll_BFu15s) C1{ Fs:0 FL:16 Fs:15}



static void Test_BFu0s_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu15s, BFu0s_BFu16ll_BFu15s)
//============================================================================


struct  BFu0s_BFu16ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu16ll_BFu16i) C1{ Fs:0 FL:16 Fi:16}



static void Test_BFu0s_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu16i, BFu0s_BFu16ll_BFu16i)
//============================================================================


struct  BFu0s_BFu16ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu16ll_BFu16ll) C1{ Fs:0 FL:16 FL:16}



static void Test_BFu0s_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu16ll, BFu0s_BFu16ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu16ll_BFu16s) C1{ Fs:0 FL:16 Fs:16}



static void Test_BFu0s_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu16s, BFu0s_BFu16ll_BFu16s)
//============================================================================


struct  BFu0s_BFu16ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu16ll_BFu17i) C1{ Fs:0 FL:16 Fi:17}



static void Test_BFu0s_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu17i, BFu0s_BFu16ll_BFu17i)
//============================================================================


struct  BFu0s_BFu16ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu16ll_BFu17ll) C1{ Fs:0 FL:16 FL:17}



static void Test_BFu0s_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu17ll, BFu0s_BFu16ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu16ll_BFu1c) C1{ Fs:0 FL:16 Fc:1}



static void Test_BFu0s_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu1c, BFu0s_BFu16ll_BFu1c)
//============================================================================


struct  BFu0s_BFu16ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu16ll_BFu1i) C1{ Fs:0 FL:16 Fi:1}



static void Test_BFu0s_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu1i, BFu0s_BFu16ll_BFu1i)
//============================================================================


struct  BFu0s_BFu16ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu16ll_BFu1ll) C1{ Fs:0 FL:16 FL:1}



static void Test_BFu0s_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu1ll, BFu0s_BFu16ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu16ll_BFu1s) C1{ Fs:0 FL:16 Fs:1}



static void Test_BFu0s_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu1s, BFu0s_BFu16ll_BFu1s)
//============================================================================


struct  BFu0s_BFu16ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu16ll_BFu31i) C1{ Fs:0 FL:16 Fi:31}



static void Test_BFu0s_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu31i, BFu0s_BFu16ll_BFu31i)
//============================================================================


struct  BFu0s_BFu16ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu16ll_BFu31ll) C1{ Fs:0 FL:16 FL:31}



static void Test_BFu0s_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu31ll, BFu0s_BFu16ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu16ll_BFu32i) C1{ Fs:0 FL:16 Fi:32}



static void Test_BFu0s_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu32i, BFu0s_BFu16ll_BFu32i)
//============================================================================


struct  BFu0s_BFu16ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu16ll_BFu32ll) C1{ Fs:0 FL:16 FL:32}



static void Test_BFu0s_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu32ll, BFu0s_BFu16ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu16ll_BFu33) C1{ Fs:0 FL:16 FL:33}



static void Test_BFu0s_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0s_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu33, BFu0s_BFu16ll_BFu33)
//============================================================================


struct  BFu0s_BFu16ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu16ll_BFu7c) C1{ Fs:0 FL:16 Fc:7}



static void Test_BFu0s_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu7c, BFu0s_BFu16ll_BFu7c)
//============================================================================


struct  BFu0s_BFu16ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu16ll_BFu7i) C1{ Fs:0 FL:16 Fi:7}



static void Test_BFu0s_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu7i, BFu0s_BFu16ll_BFu7i)
//============================================================================


struct  BFu0s_BFu16ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu16ll_BFu7ll) C1{ Fs:0 FL:16 FL:7}



static void Test_BFu0s_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu7ll, BFu0s_BFu16ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu16ll_BFu7s) C1{ Fs:0 FL:16 Fs:7}



static void Test_BFu0s_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu7s, BFu0s_BFu16ll_BFu7s)
//============================================================================


struct  BFu0s_BFu16ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu16ll_BFu8c) C1{ Fs:0 FL:16 Fc:8}



static void Test_BFu0s_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu8c, BFu0s_BFu16ll_BFu8c)
//============================================================================


struct  BFu0s_BFu16ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu16ll_BFu8i) C1{ Fs:0 FL:16 Fi:8}



static void Test_BFu0s_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu8i, BFu0s_BFu16ll_BFu8i)
//============================================================================


struct  BFu0s_BFu16ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu16ll_BFu8ll) C1{ Fs:0 FL:16 FL:8}



static void Test_BFu0s_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu8ll, BFu0s_BFu16ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu16ll_BFu8s) C1{ Fs:0 FL:16 Fs:8}



static void Test_BFu0s_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu8s, BFu0s_BFu16ll_BFu8s)
//============================================================================


struct  BFu0s_BFu16ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu16ll_BFu9i) C1{ Fs:0 FL:16 Fi:9}



static void Test_BFu0s_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu9i, BFu0s_BFu16ll_BFu9i)
//============================================================================


struct  BFu0s_BFu16ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu16ll_BFu9ll) C1{ Fs:0 FL:16 FL:9}



static void Test_BFu0s_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu9ll, BFu0s_BFu16ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu16ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu16ll_BFu9s) C1{ Fs:0 FL:16 Fs:9}



static void Test_BFu0s_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_BFu9s, BFu0s_BFu16ll_BFu9s)
//============================================================================


struct  BFu0s_BFu16ll_C  {
  unsigned short  :0;
  __tsu64 v1:16;
  char v2;
};
//SIG(1 BFu0s_BFu16ll_C) C1{ Fs:0 FL:16 Fc}



static void Test_BFu0s_BFu16ll_C()
{
  {
    init_simple_test("BFu0s_BFu16ll_C");
    static STRUCT_IF_C BFu0s_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_C, BFu0s_BFu16ll_C)
//============================================================================


struct  BFu0s_BFu16ll_D  {
  unsigned short  :0;
  __tsu64 v1:16;
  double v2;
};
//SIG(1 BFu0s_BFu16ll_D) C1{ Fs:0 FL:16 FL}



static void Test_BFu0s_BFu16ll_D()
{
  {
    init_simple_test("BFu0s_BFu16ll_D");
    static STRUCT_IF_C BFu0s_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_D, BFu0s_BFu16ll_D)
//============================================================================


struct  BFu0s_BFu16ll_F  {
  unsigned short  :0;
  __tsu64 v1:16;
  float v2;
};
//SIG(1 BFu0s_BFu16ll_F) C1{ Fs:0 FL:16 Fi}



static void Test_BFu0s_BFu16ll_F()
{
  {
    init_simple_test("BFu0s_BFu16ll_F");
    static STRUCT_IF_C BFu0s_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_F, BFu0s_BFu16ll_F)
//============================================================================


struct  BFu0s_BFu16ll_I  {
  unsigned short  :0;
  __tsu64 v1:16;
  int v2;
};
//SIG(1 BFu0s_BFu16ll_I) C1{ Fs:0 FL:16 Fi}



static void Test_BFu0s_BFu16ll_I()
{
  {
    init_simple_test("BFu0s_BFu16ll_I");
    static STRUCT_IF_C BFu0s_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_I, BFu0s_BFu16ll_I)
//============================================================================


struct  BFu0s_BFu16ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:16;
  int *v2;
};
//SIG(1 BFu0s_BFu16ll_Ip) C1{ Fs:0 FL:16 Fp}



static void Test_BFu0s_BFu16ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu16ll_Ip");
    static STRUCT_IF_C BFu0s_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_Ip, BFu0s_BFu16ll_Ip)
//============================================================================


struct  BFu0s_BFu16ll_L  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu16ll_L) C1{ Fs:0 FL:16 FL}



static void Test_BFu0s_BFu16ll_L()
{
  {
    init_simple_test("BFu0s_BFu16ll_L");
    static STRUCT_IF_C BFu0s_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_L, BFu0s_BFu16ll_L)
//============================================================================


struct  BFu0s_BFu16ll_S  {
  unsigned short  :0;
  __tsu64 v1:16;
  short v2;
};
//SIG(1 BFu0s_BFu16ll_S) C1{ Fs:0 FL:16 Fs}



static void Test_BFu0s_BFu16ll_S()
{
  {
    init_simple_test("BFu0s_BFu16ll_S");
    static STRUCT_IF_C BFu0s_BFu16ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_S, BFu0s_BFu16ll_S)
//============================================================================


struct  BFu0s_BFu16ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu16ll_Uc) C1{ Fs:0 FL:16 Fc}



static void Test_BFu0s_BFu16ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu16ll_Uc");
    static STRUCT_IF_C BFu0s_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_Uc, BFu0s_BFu16ll_Uc)
//============================================================================


struct  BFu0s_BFu16ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu16ll_Ui) C1{ Fs:0 FL:16 Fi}



static void Test_BFu0s_BFu16ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu16ll_Ui");
    static STRUCT_IF_C BFu0s_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_Ui, BFu0s_BFu16ll_Ui)
//============================================================================


struct  BFu0s_BFu16ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:16;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu16ll_Ul) C1{ Fs:0 FL:16 FL}



static void Test_BFu0s_BFu16ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu16ll_Ul");
    static STRUCT_IF_C BFu0s_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_Ul, BFu0s_BFu16ll_Ul)
//============================================================================


struct  BFu0s_BFu16ll_Us  {
  unsigned short  :0;
  __tsu64 v1:16;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu16ll_Us) C1{ Fs:0 FL:16 Fs}



static void Test_BFu0s_BFu16ll_Us()
{
  {
    init_simple_test("BFu0s_BFu16ll_Us");
    static STRUCT_IF_C BFu0s_BFu16ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_Us, BFu0s_BFu16ll_Us)
//============================================================================


struct  BFu0s_BFu16ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:16;
  void *v2;
};
//SIG(1 BFu0s_BFu16ll_Vp) C1{ Fs:0 FL:16 Fp}



static void Test_BFu0s_BFu16ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu16ll_Vp");
    static STRUCT_IF_C BFu0s_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16ll_Vp, BFu0s_BFu16ll_Vp)
//============================================================================


struct  BFu0s_BFu16s  {
  unsigned short  :0;
  unsigned short v1:16;
};
//SIG(1 BFu0s_BFu16s) C1{ Fs:0 Fs:16}



static void Test_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu16s");
    static STRUCT_IF_C BFu0s_BFu16s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s, BFu0s_BFu16s)
//============================================================================


struct  BFu0s_BFu16s_BFu0c  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu16s_BFu0c) C1{ Fs:0 Fs:16 Fc:0}



static void Test_BFu0s_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu16s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu0c, BFu0s_BFu16s_BFu0c)
//============================================================================


struct  BFu0s_BFu16s_BFu0i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu16s_BFu0i) C1{ Fs:0 Fs:16 Fi:0}



static void Test_BFu0s_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu0i, BFu0s_BFu16s_BFu0i)
//============================================================================


struct  BFu0s_BFu16s_BFu0ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu16s_BFu0ll) C1{ Fs:0 Fs:16 FL:0}



static void Test_BFu0s_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu0ll, BFu0s_BFu16s_BFu0ll)
//============================================================================


struct  BFu0s_BFu16s_BFu0s  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu16s_BFu0s) C1{ Fs:0 Fs:16 Fs:0}



static void Test_BFu0s_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu16s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu0s, BFu0s_BFu16s_BFu0s)
//============================================================================


struct  BFu0s_BFu16s_BFu15i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu16s_BFu15i) C1{ Fs:0 Fs:16 Fi:15}



static void Test_BFu0s_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu15i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu15i, BFu0s_BFu16s_BFu15i)
//============================================================================


struct  BFu0s_BFu16s_BFu15ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu16s_BFu15ll) C1{ Fs:0 Fs:16 FL:15}



static void Test_BFu0s_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu15ll, BFu0s_BFu16s_BFu15ll)
//============================================================================


struct  BFu0s_BFu16s_BFu15s  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu16s_BFu15s) C1{ Fs:0 Fs:16 Fs:15}



static void Test_BFu0s_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu15s");
    static STRUCT_IF_C BFu0s_BFu16s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu15s, BFu0s_BFu16s_BFu15s)
//============================================================================


struct  BFu0s_BFu16s_BFu16i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu16s_BFu16i) C1{ Fs:0 Fs:16 Fi:16}



static void Test_BFu0s_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu16i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu16i, BFu0s_BFu16s_BFu16i)
//============================================================================


struct  BFu0s_BFu16s_BFu16ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu16s_BFu16ll) C1{ Fs:0 Fs:16 FL:16}



static void Test_BFu0s_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu16ll, BFu0s_BFu16s_BFu16ll)
//============================================================================


struct  BFu0s_BFu16s_BFu16s  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu16s_BFu16s) C1{ Fs:0 Fs:16 Fs:16}



static void Test_BFu0s_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu16s");
    static STRUCT_IF_C BFu0s_BFu16s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu16s, BFu0s_BFu16s_BFu16s)
//============================================================================


struct  BFu0s_BFu16s_BFu17i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu16s_BFu17i) C1{ Fs:0 Fs:16 Fi:17}



static void Test_BFu0s_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu17i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu17i, BFu0s_BFu16s_BFu17i)
//============================================================================


struct  BFu0s_BFu16s_BFu17ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu16s_BFu17ll) C1{ Fs:0 Fs:16 FL:17}



static void Test_BFu0s_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu0s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu17ll, BFu0s_BFu16s_BFu17ll)
//============================================================================


struct  BFu0s_BFu16s_BFu1c  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu16s_BFu1c) C1{ Fs:0 Fs:16 Fc:1}



static void Test_BFu0s_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu1c");
    static STRUCT_IF_C BFu0s_BFu16s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu1c, BFu0s_BFu16s_BFu1c)
//============================================================================


struct  BFu0s_BFu16s_BFu1i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu16s_BFu1i) C1{ Fs:0 Fs:16 Fi:1}



static void Test_BFu0s_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu1i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu1i, BFu0s_BFu16s_BFu1i)
//============================================================================


struct  BFu0s_BFu16s_BFu1ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu16s_BFu1ll) C1{ Fs:0 Fs:16 FL:1}



static void Test_BFu0s_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu1ll, BFu0s_BFu16s_BFu1ll)
//============================================================================


struct  BFu0s_BFu16s_BFu1s  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu16s_BFu1s) C1{ Fs:0 Fs:16 Fs:1}



static void Test_BFu0s_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu1s");
    static STRUCT_IF_C BFu0s_BFu16s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu0s_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu1s, BFu0s_BFu16s_BFu1s)
//============================================================================


struct  BFu0s_BFu16s_BFu31i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu16s_BFu31i) C1{ Fs:0 Fs:16 Fi:31}



static void Test_BFu0s_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu31i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu31i, BFu0s_BFu16s_BFu31i)
//============================================================================


struct  BFu0s_BFu16s_BFu31ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu16s_BFu31ll) C1{ Fs:0 Fs:16 FL:31}



static void Test_BFu0s_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu0s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu31ll, BFu0s_BFu16s_BFu31ll)
//============================================================================


struct  BFu0s_BFu16s_BFu32i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu16s_BFu32i) C1{ Fs:0 Fs:16 Fi:32}



static void Test_BFu0s_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu32i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu32i, BFu0s_BFu16s_BFu32i)
//============================================================================


struct  BFu0s_BFu16s_BFu32ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu16s_BFu32ll) C1{ Fs:0 Fs:16 FL:32}



static void Test_BFu0s_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu0s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu32ll, BFu0s_BFu16s_BFu32ll)
//============================================================================


struct  BFu0s_BFu16s_BFu33  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu16s_BFu33) C1{ Fs:0 Fs:16 FL:33}



static void Test_BFu0s_BFu16s_BFu33()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu33");
    static STRUCT_IF_C BFu0s_BFu16s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu0s_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu33, BFu0s_BFu16s_BFu33)
//============================================================================


struct  BFu0s_BFu16s_BFu7c  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu16s_BFu7c) C1{ Fs:0 Fs:16 Fc:7}



static void Test_BFu0s_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu7c");
    static STRUCT_IF_C BFu0s_BFu16s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu7c, BFu0s_BFu16s_BFu7c)
//============================================================================


struct  BFu0s_BFu16s_BFu7i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu16s_BFu7i) C1{ Fs:0 Fs:16 Fi:7}



static void Test_BFu0s_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu7i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu7i, BFu0s_BFu16s_BFu7i)
//============================================================================


struct  BFu0s_BFu16s_BFu7ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu16s_BFu7ll) C1{ Fs:0 Fs:16 FL:7}



static void Test_BFu0s_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu7ll, BFu0s_BFu16s_BFu7ll)
//============================================================================


struct  BFu0s_BFu16s_BFu7s  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu16s_BFu7s) C1{ Fs:0 Fs:16 Fs:7}



static void Test_BFu0s_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu7s");
    static STRUCT_IF_C BFu0s_BFu16s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu0s_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu7s, BFu0s_BFu16s_BFu7s)
//============================================================================


struct  BFu0s_BFu16s_BFu8c  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu16s_BFu8c) C1{ Fs:0 Fs:16 Fc:8}



static void Test_BFu0s_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu8c");
    static STRUCT_IF_C BFu0s_BFu16s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu8c, BFu0s_BFu16s_BFu8c)
//============================================================================


struct  BFu0s_BFu16s_BFu8i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu16s_BFu8i) C1{ Fs:0 Fs:16 Fi:8}



static void Test_BFu0s_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu8i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu8i, BFu0s_BFu16s_BFu8i)
//============================================================================


struct  BFu0s_BFu16s_BFu8ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu16s_BFu8ll) C1{ Fs:0 Fs:16 FL:8}



static void Test_BFu0s_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu8ll, BFu0s_BFu16s_BFu8ll)
//============================================================================


struct  BFu0s_BFu16s_BFu8s  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu16s_BFu8s) C1{ Fs:0 Fs:16 Fs:8}



static void Test_BFu0s_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu8s");
    static STRUCT_IF_C BFu0s_BFu16s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu8s, BFu0s_BFu16s_BFu8s)
//============================================================================


struct  BFu0s_BFu16s_BFu9i  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu16s_BFu9i) C1{ Fs:0 Fs:16 Fi:9}



static void Test_BFu0s_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu9i");
    static STRUCT_IF_C BFu0s_BFu16s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu9i, BFu0s_BFu16s_BFu9i)
//============================================================================


struct  BFu0s_BFu16s_BFu9ll  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu16s_BFu9ll) C1{ Fs:0 Fs:16 FL:9}



static void Test_BFu0s_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu16s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu9ll, BFu0s_BFu16s_BFu9ll)
//============================================================================


struct  BFu0s_BFu16s_BFu9s  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu16s_BFu9s) C1{ Fs:0 Fs:16 Fs:9}



static void Test_BFu0s_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu16s_BFu9s");
    static STRUCT_IF_C BFu0s_BFu16s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_BFu9s, BFu0s_BFu16s_BFu9s)
//============================================================================


struct  BFu0s_BFu16s_C  {
  unsigned short  :0;
  unsigned short v1:16;
  char v2;
};
//SIG(1 BFu0s_BFu16s_C) C1{ Fs:0 Fs:16 Fc}



static void Test_BFu0s_BFu16s_C()
{
  {
    init_simple_test("BFu0s_BFu16s_C");
    static STRUCT_IF_C BFu0s_BFu16s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_C, BFu0s_BFu16s_C)
//============================================================================


struct  BFu0s_BFu16s_D  {
  unsigned short  :0;
  unsigned short v1:16;
  double v2;
};
//SIG(1 BFu0s_BFu16s_D) C1{ Fs:0 Fs:16 FL}



static void Test_BFu0s_BFu16s_D()
{
  {
    init_simple_test("BFu0s_BFu16s_D");
    static STRUCT_IF_C BFu0s_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_D, BFu0s_BFu16s_D)
//============================================================================


struct  BFu0s_BFu16s_F  {
  unsigned short  :0;
  unsigned short v1:16;
  float v2;
};
//SIG(1 BFu0s_BFu16s_F) C1{ Fs:0 Fs:16 Fi}



static void Test_BFu0s_BFu16s_F()
{
  {
    init_simple_test("BFu0s_BFu16s_F");
    static STRUCT_IF_C BFu0s_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_F, BFu0s_BFu16s_F)
//============================================================================


struct  BFu0s_BFu16s_I  {
  unsigned short  :0;
  unsigned short v1:16;
  int v2;
};
//SIG(1 BFu0s_BFu16s_I) C1{ Fs:0 Fs:16 Fi}



static void Test_BFu0s_BFu16s_I()
{
  {
    init_simple_test("BFu0s_BFu16s_I");
    static STRUCT_IF_C BFu0s_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_I, BFu0s_BFu16s_I)
//============================================================================


struct  BFu0s_BFu16s_Ip  {
  unsigned short  :0;
  unsigned short v1:16;
  int *v2;
};
//SIG(1 BFu0s_BFu16s_Ip) C1{ Fs:0 Fs:16 Fp}



static void Test_BFu0s_BFu16s_Ip()
{
  {
    init_simple_test("BFu0s_BFu16s_Ip");
    static STRUCT_IF_C BFu0s_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_Ip, BFu0s_BFu16s_Ip)
//============================================================================


struct  BFu0s_BFu16s_L  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu16s_L) C1{ Fs:0 Fs:16 FL}



static void Test_BFu0s_BFu16s_L()
{
  {
    init_simple_test("BFu0s_BFu16s_L");
    static STRUCT_IF_C BFu0s_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_L, BFu0s_BFu16s_L)
//============================================================================


struct  BFu0s_BFu16s_S  {
  unsigned short  :0;
  unsigned short v1:16;
  short v2;
};
//SIG(1 BFu0s_BFu16s_S) C1{ Fs:0 Fs:16 Fs}



static void Test_BFu0s_BFu16s_S()
{
  {
    init_simple_test("BFu0s_BFu16s_S");
    static STRUCT_IF_C BFu0s_BFu16s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_S, BFu0s_BFu16s_S)
//============================================================================


struct  BFu0s_BFu16s_Uc  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu16s_Uc) C1{ Fs:0 Fs:16 Fc}



static void Test_BFu0s_BFu16s_Uc()
{
  {
    init_simple_test("BFu0s_BFu16s_Uc");
    static STRUCT_IF_C BFu0s_BFu16s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_Uc, BFu0s_BFu16s_Uc)
//============================================================================


struct  BFu0s_BFu16s_Ui  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu16s_Ui) C1{ Fs:0 Fs:16 Fi}



static void Test_BFu0s_BFu16s_Ui()
{
  {
    init_simple_test("BFu0s_BFu16s_Ui");
    static STRUCT_IF_C BFu0s_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu16s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_Ui, BFu0s_BFu16s_Ui)
//============================================================================


struct  BFu0s_BFu16s_Ul  {
  unsigned short  :0;
  unsigned short v1:16;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu16s_Ul) C1{ Fs:0 Fs:16 FL}



static void Test_BFu0s_BFu16s_Ul()
{
  {
    init_simple_test("BFu0s_BFu16s_Ul");
    static STRUCT_IF_C BFu0s_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_Ul, BFu0s_BFu16s_Ul)
//============================================================================


struct  BFu0s_BFu16s_Us  {
  unsigned short  :0;
  unsigned short v1:16;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu16s_Us) C1{ Fs:0 Fs:16 Fs}



static void Test_BFu0s_BFu16s_Us()
{
  {
    init_simple_test("BFu0s_BFu16s_Us");
    static STRUCT_IF_C BFu0s_BFu16s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu16s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_Us, BFu0s_BFu16s_Us)
//============================================================================


struct  BFu0s_BFu16s_Vp  {
  unsigned short  :0;
  unsigned short v1:16;
  void *v2;
};
//SIG(1 BFu0s_BFu16s_Vp) C1{ Fs:0 Fs:16 Fp}



static void Test_BFu0s_BFu16s_Vp()
{
  {
    init_simple_test("BFu0s_BFu16s_Vp");
    static STRUCT_IF_C BFu0s_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu0s_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu16s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu16s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu16s_Vp, BFu0s_BFu16s_Vp)
//============================================================================


struct  BFu0s_BFu17i  {
  unsigned short  :0;
  unsigned int v1:17;
};
//SIG(1 BFu0s_BFu17i) C1{ Fs:0 Fi:17}



static void Test_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu17i");
    static STRUCT_IF_C BFu0s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i, BFu0s_BFu17i)
//============================================================================


struct  BFu0s_BFu17i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu17i_BFu0c) C1{ Fs:0 Fi:17 Fc:0}



static void Test_BFu0s_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu0c, BFu0s_BFu17i_BFu0c)
//============================================================================


struct  BFu0s_BFu17i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu17i_BFu0i) C1{ Fs:0 Fi:17 Fi:0}



static void Test_BFu0s_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu0i, BFu0s_BFu17i_BFu0i)
//============================================================================


struct  BFu0s_BFu17i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu17i_BFu0ll) C1{ Fs:0 Fi:17 FL:0}



static void Test_BFu0s_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu0ll, BFu0s_BFu17i_BFu0ll)
//============================================================================


struct  BFu0s_BFu17i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu17i_BFu0s) C1{ Fs:0 Fi:17 Fs:0}



static void Test_BFu0s_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu0s, BFu0s_BFu17i_BFu0s)
//============================================================================


struct  BFu0s_BFu17i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu17i_BFu15i) C1{ Fs:0 Fi:17 Fi:15}



static void Test_BFu0s_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0s_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu15i, BFu0s_BFu17i_BFu15i)
//============================================================================


struct  BFu0s_BFu17i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu17i_BFu15ll) C1{ Fs:0 Fi:17 FL:15}



static void Test_BFu0s_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu15ll, BFu0s_BFu17i_BFu15ll)
//============================================================================


struct  BFu0s_BFu17i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu17i_BFu15s) C1{ Fs:0 Fi:17 Fs:15}



static void Test_BFu0s_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu17i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0s_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu15s, BFu0s_BFu17i_BFu15s)
//============================================================================


struct  BFu0s_BFu17i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu17i_BFu16i) C1{ Fs:0 Fi:17 Fi:16}



static void Test_BFu0s_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu16i, BFu0s_BFu17i_BFu16i)
//============================================================================


struct  BFu0s_BFu17i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu17i_BFu16ll) C1{ Fs:0 Fi:17 FL:16}



static void Test_BFu0s_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu0s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu16ll, BFu0s_BFu17i_BFu16ll)
//============================================================================


struct  BFu0s_BFu17i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu17i_BFu16s) C1{ Fs:0 Fi:17 Fs:16}



static void Test_BFu0s_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu16s, BFu0s_BFu17i_BFu16s)
//============================================================================


struct  BFu0s_BFu17i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu17i_BFu17i) C1{ Fs:0 Fi:17 Fi:17}



static void Test_BFu0s_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu17i, BFu0s_BFu17i_BFu17i)
//============================================================================


struct  BFu0s_BFu17i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu17i_BFu17ll) C1{ Fs:0 Fi:17 FL:17}



static void Test_BFu0s_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu0s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu17ll, BFu0s_BFu17i_BFu17ll)
//============================================================================


struct  BFu0s_BFu17i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu17i_BFu1c) C1{ Fs:0 Fi:17 Fc:1}



static void Test_BFu0s_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0s_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu1c, BFu0s_BFu17i_BFu1c)
//============================================================================


struct  BFu0s_BFu17i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu17i_BFu1i) C1{ Fs:0 Fi:17 Fi:1}



static void Test_BFu0s_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0s_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu1i, BFu0s_BFu17i_BFu1i)
//============================================================================


struct  BFu0s_BFu17i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu17i_BFu1ll) C1{ Fs:0 Fi:17 FL:1}



static void Test_BFu0s_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0s_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu1ll, BFu0s_BFu17i_BFu1ll)
//============================================================================


struct  BFu0s_BFu17i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu17i_BFu1s) C1{ Fs:0 Fi:17 Fs:1}



static void Test_BFu0s_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0s_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu1s, BFu0s_BFu17i_BFu1s)
//============================================================================


struct  BFu0s_BFu17i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu17i_BFu31i) C1{ Fs:0 Fi:17 Fi:31}



static void Test_BFu0s_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu31i, BFu0s_BFu17i_BFu31i)
//============================================================================


struct  BFu0s_BFu17i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu17i_BFu31ll) C1{ Fs:0 Fi:17 FL:31}



static void Test_BFu0s_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu0s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu31ll, BFu0s_BFu17i_BFu31ll)
//============================================================================


struct  BFu0s_BFu17i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu17i_BFu32i) C1{ Fs:0 Fi:17 Fi:32}



static void Test_BFu0s_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu32i, BFu0s_BFu17i_BFu32i)
//============================================================================


struct  BFu0s_BFu17i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu17i_BFu32ll) C1{ Fs:0 Fi:17 FL:32}



static void Test_BFu0s_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu0s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu32ll, BFu0s_BFu17i_BFu32ll)
//============================================================================


struct  BFu0s_BFu17i_BFu33  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu17i_BFu33) C1{ Fs:0 Fi:17 FL:33}



static void Test_BFu0s_BFu17i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu33");
    static STRUCT_IF_C BFu0s_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu0s_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu33, BFu0s_BFu17i_BFu33)
//============================================================================


struct  BFu0s_BFu17i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu17i_BFu7c) C1{ Fs:0 Fi:17 Fc:7}



static void Test_BFu0s_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0s_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu7c, BFu0s_BFu17i_BFu7c)
//============================================================================


struct  BFu0s_BFu17i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu17i_BFu7i) C1{ Fs:0 Fi:17 Fi:7}



static void Test_BFu0s_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0s_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu7i, BFu0s_BFu17i_BFu7i)
//============================================================================


struct  BFu0s_BFu17i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu17i_BFu7ll) C1{ Fs:0 Fi:17 FL:7}



static void Test_BFu0s_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu7ll, BFu0s_BFu17i_BFu7ll)
//============================================================================


struct  BFu0s_BFu17i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu17i_BFu7s) C1{ Fs:0 Fi:17 Fs:7}



static void Test_BFu0s_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0s_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu7s, BFu0s_BFu17i_BFu7s)
//============================================================================


struct  BFu0s_BFu17i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu17i_BFu8c) C1{ Fs:0 Fi:17 Fc:8}



static void Test_BFu0s_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu17i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu0s_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu8c, BFu0s_BFu17i_BFu8c)
//============================================================================


struct  BFu0s_BFu17i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu17i_BFu8i) C1{ Fs:0 Fi:17 Fi:8}



static void Test_BFu0s_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0s_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu8i, BFu0s_BFu17i_BFu8i)
//============================================================================


struct  BFu0s_BFu17i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu17i_BFu8ll) C1{ Fs:0 Fi:17 FL:8}



static void Test_BFu0s_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu8ll, BFu0s_BFu17i_BFu8ll)
//============================================================================


struct  BFu0s_BFu17i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu17i_BFu8s) C1{ Fs:0 Fi:17 Fs:8}



static void Test_BFu0s_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu17i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0s_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu8s, BFu0s_BFu17i_BFu8s)
//============================================================================


struct  BFu0s_BFu17i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu17i_BFu9i) C1{ Fs:0 Fi:17 Fi:9}



static void Test_BFu0s_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu17i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0s_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu9i, BFu0s_BFu17i_BFu9i)
//============================================================================


struct  BFu0s_BFu17i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu17i_BFu9ll) C1{ Fs:0 Fi:17 FL:9}



static void Test_BFu0s_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu17i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu9ll, BFu0s_BFu17i_BFu9ll)
//============================================================================


struct  BFu0s_BFu17i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu17i_BFu9s) C1{ Fs:0 Fi:17 Fs:9}



static void Test_BFu0s_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu17i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu17i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0s_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_BFu9s, BFu0s_BFu17i_BFu9s)
//============================================================================


struct  BFu0s_BFu17i_C  {
  unsigned short  :0;
  unsigned int v1:17;
  char v2;
};
//SIG(1 BFu0s_BFu17i_C) C1{ Fs:0 Fi:17 Fc}



static void Test_BFu0s_BFu17i_C()
{
  {
    init_simple_test("BFu0s_BFu17i_C");
    static STRUCT_IF_C BFu0s_BFu17i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_C");
    check_field_offset(lv, v2, 3, "BFu0s_BFu17i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_C, BFu0s_BFu17i_C)
//============================================================================


struct  BFu0s_BFu17i_D  {
  unsigned short  :0;
  unsigned int v1:17;
  double v2;
};
//SIG(1 BFu0s_BFu17i_D) C1{ Fs:0 Fi:17 FL}



static void Test_BFu0s_BFu17i_D()
{
  {
    init_simple_test("BFu0s_BFu17i_D");
    static STRUCT_IF_C BFu0s_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_D, BFu0s_BFu17i_D)
//============================================================================


struct  BFu0s_BFu17i_F  {
  unsigned short  :0;
  unsigned int v1:17;
  float v2;
};
//SIG(1 BFu0s_BFu17i_F) C1{ Fs:0 Fi:17 Fi}



static void Test_BFu0s_BFu17i_F()
{
  {
    init_simple_test("BFu0s_BFu17i_F");
    static STRUCT_IF_C BFu0s_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_F, BFu0s_BFu17i_F)
//============================================================================


struct  BFu0s_BFu17i_I  {
  unsigned short  :0;
  unsigned int v1:17;
  int v2;
};
//SIG(1 BFu0s_BFu17i_I) C1{ Fs:0 Fi:17 Fi}



static void Test_BFu0s_BFu17i_I()
{
  {
    init_simple_test("BFu0s_BFu17i_I");
    static STRUCT_IF_C BFu0s_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_I, BFu0s_BFu17i_I)
//============================================================================


struct  BFu0s_BFu17i_Ip  {
  unsigned short  :0;
  unsigned int v1:17;
  int *v2;
};
//SIG(1 BFu0s_BFu17i_Ip) C1{ Fs:0 Fi:17 Fp}



static void Test_BFu0s_BFu17i_Ip()
{
  {
    init_simple_test("BFu0s_BFu17i_Ip");
    static STRUCT_IF_C BFu0s_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_Ip, BFu0s_BFu17i_Ip)
//============================================================================


struct  BFu0s_BFu17i_L  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu17i_L) C1{ Fs:0 Fi:17 FL}



static void Test_BFu0s_BFu17i_L()
{
  {
    init_simple_test("BFu0s_BFu17i_L");
    static STRUCT_IF_C BFu0s_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_L, BFu0s_BFu17i_L)
//============================================================================


struct  BFu0s_BFu17i_S  {
  unsigned short  :0;
  unsigned int v1:17;
  short v2;
};
//SIG(1 BFu0s_BFu17i_S) C1{ Fs:0 Fi:17 Fs}



static void Test_BFu0s_BFu17i_S()
{
  {
    init_simple_test("BFu0s_BFu17i_S");
    static STRUCT_IF_C BFu0s_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_S");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_S, BFu0s_BFu17i_S)
//============================================================================


struct  BFu0s_BFu17i_Uc  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu17i_Uc) C1{ Fs:0 Fi:17 Fc}



static void Test_BFu0s_BFu17i_Uc()
{
  {
    init_simple_test("BFu0s_BFu17i_Uc");
    static STRUCT_IF_C BFu0s_BFu17i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_Uc");
    check_field_offset(lv, v2, 3, "BFu0s_BFu17i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_Uc, BFu0s_BFu17i_Uc)
//============================================================================


struct  BFu0s_BFu17i_Ui  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu17i_Ui) C1{ Fs:0 Fi:17 Fi}



static void Test_BFu0s_BFu17i_Ui()
{
  {
    init_simple_test("BFu0s_BFu17i_Ui");
    static STRUCT_IF_C BFu0s_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_Ui, BFu0s_BFu17i_Ui)
//============================================================================


struct  BFu0s_BFu17i_Ul  {
  unsigned short  :0;
  unsigned int v1:17;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu17i_Ul) C1{ Fs:0 Fi:17 FL}



static void Test_BFu0s_BFu17i_Ul()
{
  {
    init_simple_test("BFu0s_BFu17i_Ul");
    static STRUCT_IF_C BFu0s_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_Ul, BFu0s_BFu17i_Ul)
//============================================================================


struct  BFu0s_BFu17i_Us  {
  unsigned short  :0;
  unsigned int v1:17;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu17i_Us) C1{ Fs:0 Fi:17 Fs}



static void Test_BFu0s_BFu17i_Us()
{
  {
    init_simple_test("BFu0s_BFu17i_Us");
    static STRUCT_IF_C BFu0s_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_Us");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_Us, BFu0s_BFu17i_Us)
//============================================================================


struct  BFu0s_BFu17i_Vp  {
  unsigned short  :0;
  unsigned int v1:17;
  void *v2;
};
//SIG(1 BFu0s_BFu17i_Vp) C1{ Fs:0 Fi:17 Fp}



static void Test_BFu0s_BFu17i_Vp()
{
  {
    init_simple_test("BFu0s_BFu17i_Vp");
    static STRUCT_IF_C BFu0s_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17i_Vp, BFu0s_BFu17i_Vp)
//============================================================================


struct  BFu0s_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:17;
};
//SIG(1 BFu0s_BFu17ll) C1{ Fs:0 FL:17}



static void Test_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll, BFu0s_BFu17ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu17ll_BFu0c) C1{ Fs:0 FL:17 Fc:0}



static void Test_BFu0s_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu0c, BFu0s_BFu17ll_BFu0c)
//============================================================================


struct  BFu0s_BFu17ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu17ll_BFu0i) C1{ Fs:0 FL:17 Fi:0}



static void Test_BFu0s_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu0i, BFu0s_BFu17ll_BFu0i)
//============================================================================


struct  BFu0s_BFu17ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu17ll_BFu0ll) C1{ Fs:0 FL:17 FL:0}



static void Test_BFu0s_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu0ll, BFu0s_BFu17ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu17ll_BFu0s) C1{ Fs:0 FL:17 Fs:0}



static void Test_BFu0s_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu0s, BFu0s_BFu17ll_BFu0s)
//============================================================================


struct  BFu0s_BFu17ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu17ll_BFu15i) C1{ Fs:0 FL:17 Fi:15}



static void Test_BFu0s_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu15i, BFu0s_BFu17ll_BFu15i)
//============================================================================


struct  BFu0s_BFu17ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu17ll_BFu15ll) C1{ Fs:0 FL:17 FL:15}



static void Test_BFu0s_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu15ll, BFu0s_BFu17ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu17ll_BFu15s) C1{ Fs:0 FL:17 Fs:15}



static void Test_BFu0s_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu0s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu15s, BFu0s_BFu17ll_BFu15s)
//============================================================================


struct  BFu0s_BFu17ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu17ll_BFu16i) C1{ Fs:0 FL:17 Fi:16}



static void Test_BFu0s_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu16i, BFu0s_BFu17ll_BFu16i)
//============================================================================


struct  BFu0s_BFu17ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu17ll_BFu16ll) C1{ Fs:0 FL:17 FL:16}



static void Test_BFu0s_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu0s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu16ll, BFu0s_BFu17ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu17ll_BFu16s) C1{ Fs:0 FL:17 Fs:16}



static void Test_BFu0s_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu16s, BFu0s_BFu17ll_BFu16s)
//============================================================================


struct  BFu0s_BFu17ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu17ll_BFu17i) C1{ Fs:0 FL:17 Fi:17}



static void Test_BFu0s_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu17i, BFu0s_BFu17ll_BFu17i)
//============================================================================


struct  BFu0s_BFu17ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu17ll_BFu17ll) C1{ Fs:0 FL:17 FL:17}



static void Test_BFu0s_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu0s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu17ll, BFu0s_BFu17ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu17ll_BFu1c) C1{ Fs:0 FL:17 Fc:1}



static void Test_BFu0s_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0s_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu1c, BFu0s_BFu17ll_BFu1c)
//============================================================================


struct  BFu0s_BFu17ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu17ll_BFu1i) C1{ Fs:0 FL:17 Fi:1}



static void Test_BFu0s_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0s_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu1i, BFu0s_BFu17ll_BFu1i)
//============================================================================


struct  BFu0s_BFu17ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu17ll_BFu1ll) C1{ Fs:0 FL:17 FL:1}



static void Test_BFu0s_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0s_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu1ll, BFu0s_BFu17ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu17ll_BFu1s) C1{ Fs:0 FL:17 Fs:1}



static void Test_BFu0s_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu0s_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu1s, BFu0s_BFu17ll_BFu1s)
//============================================================================


struct  BFu0s_BFu17ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu17ll_BFu31i) C1{ Fs:0 FL:17 Fi:31}



static void Test_BFu0s_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu31i, BFu0s_BFu17ll_BFu31i)
//============================================================================


struct  BFu0s_BFu17ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu17ll_BFu31ll) C1{ Fs:0 FL:17 FL:31}



static void Test_BFu0s_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu0s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu31ll, BFu0s_BFu17ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu17ll_BFu32i) C1{ Fs:0 FL:17 Fi:32}



static void Test_BFu0s_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu32i, BFu0s_BFu17ll_BFu32i)
//============================================================================


struct  BFu0s_BFu17ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu17ll_BFu32ll) C1{ Fs:0 FL:17 FL:32}



static void Test_BFu0s_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu0s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu32ll, BFu0s_BFu17ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu17ll_BFu33) C1{ Fs:0 FL:17 FL:33}



static void Test_BFu0s_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu0s_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu33, BFu0s_BFu17ll_BFu33)
//============================================================================


struct  BFu0s_BFu17ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu17ll_BFu7c) C1{ Fs:0 FL:17 Fc:7}



static void Test_BFu0s_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu7c, BFu0s_BFu17ll_BFu7c)
//============================================================================


struct  BFu0s_BFu17ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu17ll_BFu7i) C1{ Fs:0 FL:17 Fi:7}



static void Test_BFu0s_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu7i, BFu0s_BFu17ll_BFu7i)
//============================================================================


struct  BFu0s_BFu17ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu17ll_BFu7ll) C1{ Fs:0 FL:17 FL:7}



static void Test_BFu0s_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu7ll, BFu0s_BFu17ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu17ll_BFu7s) C1{ Fs:0 FL:17 Fs:7}



static void Test_BFu0s_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu0s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu7s, BFu0s_BFu17ll_BFu7s)
//============================================================================


struct  BFu0s_BFu17ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu17ll_BFu8c) C1{ Fs:0 FL:17 Fc:8}



static void Test_BFu0s_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu0s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu8c, BFu0s_BFu17ll_BFu8c)
//============================================================================


struct  BFu0s_BFu17ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu17ll_BFu8i) C1{ Fs:0 FL:17 Fi:8}



static void Test_BFu0s_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu8i, BFu0s_BFu17ll_BFu8i)
//============================================================================


struct  BFu0s_BFu17ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu17ll_BFu8ll) C1{ Fs:0 FL:17 FL:8}



static void Test_BFu0s_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu8ll, BFu0s_BFu17ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu17ll_BFu8s) C1{ Fs:0 FL:17 Fs:8}



static void Test_BFu0s_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu0s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu8s, BFu0s_BFu17ll_BFu8s)
//============================================================================


struct  BFu0s_BFu17ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu17ll_BFu9i) C1{ Fs:0 FL:17 Fi:9}



static void Test_BFu0s_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu9i, BFu0s_BFu17ll_BFu9i)
//============================================================================


struct  BFu0s_BFu17ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu17ll_BFu9ll) C1{ Fs:0 FL:17 FL:9}



static void Test_BFu0s_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu9ll, BFu0s_BFu17ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu17ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu17ll_BFu9s) C1{ Fs:0 FL:17 Fs:9}



static void Test_BFu0s_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu17ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu0s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_BFu9s, BFu0s_BFu17ll_BFu9s)
//============================================================================


struct  BFu0s_BFu17ll_C  {
  unsigned short  :0;
  __tsu64 v1:17;
  char v2;
};
//SIG(1 BFu0s_BFu17ll_C) C1{ Fs:0 FL:17 Fc}



static void Test_BFu0s_BFu17ll_C()
{
  {
    init_simple_test("BFu0s_BFu17ll_C");
    static STRUCT_IF_C BFu0s_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_C");
    check_field_offset(lv, v2, 3, "BFu0s_BFu17ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_C, BFu0s_BFu17ll_C)
//============================================================================


struct  BFu0s_BFu17ll_D  {
  unsigned short  :0;
  __tsu64 v1:17;
  double v2;
};
//SIG(1 BFu0s_BFu17ll_D) C1{ Fs:0 FL:17 FL}



static void Test_BFu0s_BFu17ll_D()
{
  {
    init_simple_test("BFu0s_BFu17ll_D");
    static STRUCT_IF_C BFu0s_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_D, BFu0s_BFu17ll_D)
//============================================================================


struct  BFu0s_BFu17ll_F  {
  unsigned short  :0;
  __tsu64 v1:17;
  float v2;
};
//SIG(1 BFu0s_BFu17ll_F) C1{ Fs:0 FL:17 Fi}



static void Test_BFu0s_BFu17ll_F()
{
  {
    init_simple_test("BFu0s_BFu17ll_F");
    static STRUCT_IF_C BFu0s_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_F, BFu0s_BFu17ll_F)
//============================================================================


struct  BFu0s_BFu17ll_I  {
  unsigned short  :0;
  __tsu64 v1:17;
  int v2;
};
//SIG(1 BFu0s_BFu17ll_I) C1{ Fs:0 FL:17 Fi}



static void Test_BFu0s_BFu17ll_I()
{
  {
    init_simple_test("BFu0s_BFu17ll_I");
    static STRUCT_IF_C BFu0s_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_I, BFu0s_BFu17ll_I)
//============================================================================


struct  BFu0s_BFu17ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:17;
  int *v2;
};
//SIG(1 BFu0s_BFu17ll_Ip) C1{ Fs:0 FL:17 Fp}



static void Test_BFu0s_BFu17ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu17ll_Ip");
    static STRUCT_IF_C BFu0s_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_Ip, BFu0s_BFu17ll_Ip)
//============================================================================


struct  BFu0s_BFu17ll_L  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu17ll_L) C1{ Fs:0 FL:17 FL}



static void Test_BFu0s_BFu17ll_L()
{
  {
    init_simple_test("BFu0s_BFu17ll_L");
    static STRUCT_IF_C BFu0s_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_L, BFu0s_BFu17ll_L)
//============================================================================


struct  BFu0s_BFu17ll_S  {
  unsigned short  :0;
  __tsu64 v1:17;
  short v2;
};
//SIG(1 BFu0s_BFu17ll_S) C1{ Fs:0 FL:17 Fs}



static void Test_BFu0s_BFu17ll_S()
{
  {
    init_simple_test("BFu0s_BFu17ll_S");
    static STRUCT_IF_C BFu0s_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_S");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_S, BFu0s_BFu17ll_S)
//============================================================================


struct  BFu0s_BFu17ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu17ll_Uc) C1{ Fs:0 FL:17 Fc}



static void Test_BFu0s_BFu17ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu17ll_Uc");
    static STRUCT_IF_C BFu0s_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_Uc");
    check_field_offset(lv, v2, 3, "BFu0s_BFu17ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_Uc, BFu0s_BFu17ll_Uc)
//============================================================================


struct  BFu0s_BFu17ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu17ll_Ui) C1{ Fs:0 FL:17 Fi}



static void Test_BFu0s_BFu17ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu17ll_Ui");
    static STRUCT_IF_C BFu0s_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_Ui, BFu0s_BFu17ll_Ui)
//============================================================================


struct  BFu0s_BFu17ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:17;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu17ll_Ul) C1{ Fs:0 FL:17 FL}



static void Test_BFu0s_BFu17ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu17ll_Ul");
    static STRUCT_IF_C BFu0s_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_Ul, BFu0s_BFu17ll_Ul)
//============================================================================


struct  BFu0s_BFu17ll_Us  {
  unsigned short  :0;
  __tsu64 v1:17;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu17ll_Us) C1{ Fs:0 FL:17 Fs}



static void Test_BFu0s_BFu17ll_Us()
{
  {
    init_simple_test("BFu0s_BFu17ll_Us");
    static STRUCT_IF_C BFu0s_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_Us");
    check_field_offset(lv, v2, 4, "BFu0s_BFu17ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_Us, BFu0s_BFu17ll_Us)
//============================================================================


struct  BFu0s_BFu17ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:17;
  void *v2;
};
//SIG(1 BFu0s_BFu17ll_Vp) C1{ Fs:0 FL:17 Fp}



static void Test_BFu0s_BFu17ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu17ll_Vp");
    static STRUCT_IF_C BFu0s_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu0s_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu17ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu17ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu17ll_Vp, BFu0s_BFu17ll_Vp)
//============================================================================


struct  BFu0s_BFu1c  {
  unsigned short  :0;
  unsigned char v1:1;
};
//SIG(1 BFu0s_BFu1c) C1{ Fs:0 Fc:1}



static void Test_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu1c");
    static STRUCT_IF_C BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c, BFu0s_BFu1c)
//============================================================================


struct  BFu0s_BFu1c_BFu0c  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu1c_BFu0c) C1{ Fs:0 Fc:1 Fc:0}



static void Test_BFu0s_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu0c, BFu0s_BFu1c_BFu0c)
//============================================================================


struct  BFu0s_BFu1c_BFu0i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu1c_BFu0i) C1{ Fs:0 Fc:1 Fi:0}



static void Test_BFu0s_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu0i, BFu0s_BFu1c_BFu0i)
//============================================================================


struct  BFu0s_BFu1c_BFu0ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu1c_BFu0ll) C1{ Fs:0 Fc:1 FL:0}



static void Test_BFu0s_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu0ll, BFu0s_BFu1c_BFu0ll)
//============================================================================


struct  BFu0s_BFu1c_BFu0s  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu1c_BFu0s) C1{ Fs:0 Fc:1 Fs:0}



static void Test_BFu0s_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu0s, BFu0s_BFu1c_BFu0s)
//============================================================================


struct  BFu0s_BFu1c_BFu15i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu1c_BFu15i) C1{ Fs:0 Fc:1 Fi:15}



static void Test_BFu0s_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu15i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu15i, BFu0s_BFu1c_BFu15i)
//============================================================================


struct  BFu0s_BFu1c_BFu15ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu1c_BFu15ll) C1{ Fs:0 Fc:1 FL:15}



static void Test_BFu0s_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu15ll, BFu0s_BFu1c_BFu15ll)
//============================================================================


struct  BFu0s_BFu1c_BFu15s  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu1c_BFu15s) C1{ Fs:0 Fc:1 Fs:15}



static void Test_BFu0s_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu15s");
    static STRUCT_IF_C BFu0s_BFu1c_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu15s, BFu0s_BFu1c_BFu15s)
//============================================================================


struct  BFu0s_BFu1c_BFu16i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu1c_BFu16i) C1{ Fs:0 Fc:1 Fi:16}



static void Test_BFu0s_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu16i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0s_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu16i, BFu0s_BFu1c_BFu16i)
//============================================================================


struct  BFu0s_BFu1c_BFu16ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu1c_BFu16ll) C1{ Fs:0 Fc:1 FL:16}



static void Test_BFu0s_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu16ll, BFu0s_BFu1c_BFu16ll)
//============================================================================


struct  BFu0s_BFu1c_BFu16s  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu1c_BFu16s) C1{ Fs:0 Fc:1 Fs:16}



static void Test_BFu0s_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu16s");
    static STRUCT_IF_C BFu0s_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu16s, BFu0s_BFu1c_BFu16s)
//============================================================================


struct  BFu0s_BFu1c_BFu17i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu1c_BFu17i) C1{ Fs:0 Fc:1 Fi:17}



static void Test_BFu0s_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu17i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0s_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu17i, BFu0s_BFu1c_BFu17i)
//============================================================================


struct  BFu0s_BFu1c_BFu17ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu1c_BFu17ll) C1{ Fs:0 Fc:1 FL:17}



static void Test_BFu0s_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu17ll, BFu0s_BFu1c_BFu17ll)
//============================================================================


struct  BFu0s_BFu1c_BFu1c  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu1c_BFu1c) C1{ Fs:0 Fc:1 Fc:1}



static void Test_BFu0s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu1c");
    static STRUCT_IF_C BFu0s_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu1c, BFu0s_BFu1c_BFu1c)
//============================================================================


struct  BFu0s_BFu1c_BFu1i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu1c_BFu1i) C1{ Fs:0 Fc:1 Fi:1}



static void Test_BFu0s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu1i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu1i, BFu0s_BFu1c_BFu1i)
//============================================================================


struct  BFu0s_BFu1c_BFu1ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu1c_BFu1ll) C1{ Fs:0 Fc:1 FL:1}



static void Test_BFu0s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu1ll, BFu0s_BFu1c_BFu1ll)
//============================================================================


struct  BFu0s_BFu1c_BFu1s  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu1c_BFu1s) C1{ Fs:0 Fc:1 Fs:1}



static void Test_BFu0s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu1s");
    static STRUCT_IF_C BFu0s_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu1s, BFu0s_BFu1c_BFu1s)
//============================================================================


struct  BFu0s_BFu1c_BFu31i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu1c_BFu31i) C1{ Fs:0 Fc:1 Fi:31}



static void Test_BFu0s_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu31i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0s_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu31i, BFu0s_BFu1c_BFu31i)
//============================================================================


struct  BFu0s_BFu1c_BFu31ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu1c_BFu31ll) C1{ Fs:0 Fc:1 FL:31}



static void Test_BFu0s_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu31ll, BFu0s_BFu1c_BFu31ll)
//============================================================================


struct  BFu0s_BFu1c_BFu32i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu1c_BFu32i) C1{ Fs:0 Fc:1 Fi:32}



static void Test_BFu0s_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu32i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu32i, BFu0s_BFu1c_BFu32i)
//============================================================================


struct  BFu0s_BFu1c_BFu32ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu1c_BFu32ll) C1{ Fs:0 Fc:1 FL:32}



static void Test_BFu0s_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu0s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu32ll, BFu0s_BFu1c_BFu32ll)
//============================================================================


struct  BFu0s_BFu1c_BFu33  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu1c_BFu33) C1{ Fs:0 Fc:1 FL:33}



static void Test_BFu0s_BFu1c_BFu33()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu33");
    static STRUCT_IF_C BFu0s_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu0s_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu33, BFu0s_BFu1c_BFu33)
//============================================================================


struct  BFu0s_BFu1c_BFu7c  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu1c_BFu7c) C1{ Fs:0 Fc:1 Fc:7}



static void Test_BFu0s_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu7c");
    static STRUCT_IF_C BFu0s_BFu1c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu1c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu7c, BFu0s_BFu1c_BFu7c)
//============================================================================


struct  BFu0s_BFu1c_BFu7i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu1c_BFu7i) C1{ Fs:0 Fc:1 Fi:7}



static void Test_BFu0s_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu7i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu7i, BFu0s_BFu1c_BFu7i)
//============================================================================


struct  BFu0s_BFu1c_BFu7ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu1c_BFu7ll) C1{ Fs:0 Fc:1 FL:7}



static void Test_BFu0s_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu7ll, BFu0s_BFu1c_BFu7ll)
//============================================================================


struct  BFu0s_BFu1c_BFu7s  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu1c_BFu7s) C1{ Fs:0 Fc:1 Fs:7}



static void Test_BFu0s_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu7s");
    static STRUCT_IF_C BFu0s_BFu1c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu7s, BFu0s_BFu1c_BFu7s)
//============================================================================


struct  BFu0s_BFu1c_BFu8c  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu1c_BFu8c) C1{ Fs:0 Fc:1 Fc:8}



static void Test_BFu0s_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu8c");
    static STRUCT_IF_C BFu0s_BFu1c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu8c, BFu0s_BFu1c_BFu8c)
//============================================================================


struct  BFu0s_BFu1c_BFu8i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu1c_BFu8i) C1{ Fs:0 Fc:1 Fi:8}



static void Test_BFu0s_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu8i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu8i, BFu0s_BFu1c_BFu8i)
//============================================================================


struct  BFu0s_BFu1c_BFu8ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu1c_BFu8ll) C1{ Fs:0 Fc:1 FL:8}



static void Test_BFu0s_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu8ll, BFu0s_BFu1c_BFu8ll)
//============================================================================


struct  BFu0s_BFu1c_BFu8s  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu1c_BFu8s) C1{ Fs:0 Fc:1 Fs:8}



static void Test_BFu0s_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu8s");
    static STRUCT_IF_C BFu0s_BFu1c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu8s, BFu0s_BFu1c_BFu8s)
//============================================================================


struct  BFu0s_BFu1c_BFu9i  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu1c_BFu9i) C1{ Fs:0 Fc:1 Fi:9}



static void Test_BFu0s_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu9i");
    static STRUCT_IF_C BFu0s_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu9i, BFu0s_BFu1c_BFu9i)
//============================================================================


struct  BFu0s_BFu1c_BFu9ll  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu1c_BFu9ll) C1{ Fs:0 Fc:1 FL:9}



static void Test_BFu0s_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu9ll, BFu0s_BFu1c_BFu9ll)
//============================================================================


struct  BFu0s_BFu1c_BFu9s  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu1c_BFu9s) C1{ Fs:0 Fc:1 Fs:9}



static void Test_BFu0s_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu1c_BFu9s");
    static STRUCT_IF_C BFu0s_BFu1c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_BFu9s, BFu0s_BFu1c_BFu9s)
//============================================================================


struct  BFu0s_BFu1c_C  {
  unsigned short  :0;
  unsigned char v1:1;
  char v2;
};
//SIG(1 BFu0s_BFu1c_C) C1{ Fs:0 Fc:1 Fc}



static void Test_BFu0s_BFu1c_C()
{
  {
    init_simple_test("BFu0s_BFu1c_C");
    static STRUCT_IF_C BFu0s_BFu1c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu1c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_C, BFu0s_BFu1c_C)
//============================================================================


struct  BFu0s_BFu1c_D  {
  unsigned short  :0;
  unsigned char v1:1;
  double v2;
};
//SIG(1 BFu0s_BFu1c_D) C1{ Fs:0 Fc:1 FL}



static void Test_BFu0s_BFu1c_D()
{
  {
    init_simple_test("BFu0s_BFu1c_D");
    static STRUCT_IF_C BFu0s_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_D, BFu0s_BFu1c_D)
//============================================================================


struct  BFu0s_BFu1c_F  {
  unsigned short  :0;
  unsigned char v1:1;
  float v2;
};
//SIG(1 BFu0s_BFu1c_F) C1{ Fs:0 Fc:1 Fi}



static void Test_BFu0s_BFu1c_F()
{
  {
    init_simple_test("BFu0s_BFu1c_F");
    static STRUCT_IF_C BFu0s_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_F, BFu0s_BFu1c_F)
//============================================================================


struct  BFu0s_BFu1c_I  {
  unsigned short  :0;
  unsigned char v1:1;
  int v2;
};
//SIG(1 BFu0s_BFu1c_I) C1{ Fs:0 Fc:1 Fi}



static void Test_BFu0s_BFu1c_I()
{
  {
    init_simple_test("BFu0s_BFu1c_I");
    static STRUCT_IF_C BFu0s_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_I, BFu0s_BFu1c_I)
//============================================================================


struct  BFu0s_BFu1c_Ip  {
  unsigned short  :0;
  unsigned char v1:1;
  int *v2;
};
//SIG(1 BFu0s_BFu1c_Ip) C1{ Fs:0 Fc:1 Fp}



static void Test_BFu0s_BFu1c_Ip()
{
  {
    init_simple_test("BFu0s_BFu1c_Ip");
    static STRUCT_IF_C BFu0s_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_Ip, BFu0s_BFu1c_Ip)
//============================================================================


struct  BFu0s_BFu1c_L  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu1c_L) C1{ Fs:0 Fc:1 FL}



static void Test_BFu0s_BFu1c_L()
{
  {
    init_simple_test("BFu0s_BFu1c_L");
    static STRUCT_IF_C BFu0s_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_L, BFu0s_BFu1c_L)
//============================================================================


struct  BFu0s_BFu1c_S  {
  unsigned short  :0;
  unsigned char v1:1;
  short v2;
};
//SIG(1 BFu0s_BFu1c_S) C1{ Fs:0 Fc:1 Fs}



static void Test_BFu0s_BFu1c_S()
{
  {
    init_simple_test("BFu0s_BFu1c_S");
    static STRUCT_IF_C BFu0s_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu1c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_S, BFu0s_BFu1c_S)
//============================================================================


struct  BFu0s_BFu1c_Uc  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu1c_Uc) C1{ Fs:0 Fc:1 Fc}



static void Test_BFu0s_BFu1c_Uc()
{
  {
    init_simple_test("BFu0s_BFu1c_Uc");
    static STRUCT_IF_C BFu0s_BFu1c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1c_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu1c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_Uc, BFu0s_BFu1c_Uc)
//============================================================================


struct  BFu0s_BFu1c_Ui  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu1c_Ui) C1{ Fs:0 Fc:1 Fi}



static void Test_BFu0s_BFu1c_Ui()
{
  {
    init_simple_test("BFu0s_BFu1c_Ui");
    static STRUCT_IF_C BFu0s_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_Ui, BFu0s_BFu1c_Ui)
//============================================================================


struct  BFu0s_BFu1c_Ul  {
  unsigned short  :0;
  unsigned char v1:1;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu1c_Ul) C1{ Fs:0 Fc:1 FL}



static void Test_BFu0s_BFu1c_Ul()
{
  {
    init_simple_test("BFu0s_BFu1c_Ul");
    static STRUCT_IF_C BFu0s_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_Ul, BFu0s_BFu1c_Ul)
//============================================================================


struct  BFu0s_BFu1c_Us  {
  unsigned short  :0;
  unsigned char v1:1;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu1c_Us) C1{ Fs:0 Fc:1 Fs}



static void Test_BFu0s_BFu1c_Us()
{
  {
    init_simple_test("BFu0s_BFu1c_Us");
    static STRUCT_IF_C BFu0s_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu1c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_Us, BFu0s_BFu1c_Us)
//============================================================================


struct  BFu0s_BFu1c_Vp  {
  unsigned short  :0;
  unsigned char v1:1;
  void *v2;
};
//SIG(1 BFu0s_BFu1c_Vp) C1{ Fs:0 Fc:1 Fp}



static void Test_BFu0s_BFu1c_Vp()
{
  {
    init_simple_test("BFu0s_BFu1c_Vp");
    static STRUCT_IF_C BFu0s_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1c_Vp, BFu0s_BFu1c_Vp)
//============================================================================


struct  BFu0s_BFu1i  {
  unsigned short  :0;
  unsigned int v1:1;
};
//SIG(1 BFu0s_BFu1i) C1{ Fs:0 Fi:1}



static void Test_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu1i");
    static STRUCT_IF_C BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i, BFu0s_BFu1i)
//============================================================================


struct  BFu0s_BFu1i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu1i_BFu0c) C1{ Fs:0 Fi:1 Fc:0}



static void Test_BFu0s_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu0c, BFu0s_BFu1i_BFu0c)
//============================================================================


struct  BFu0s_BFu1i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu1i_BFu0i) C1{ Fs:0 Fi:1 Fi:0}



static void Test_BFu0s_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu0i, BFu0s_BFu1i_BFu0i)
//============================================================================


struct  BFu0s_BFu1i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu1i_BFu0ll) C1{ Fs:0 Fi:1 FL:0}



static void Test_BFu0s_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu0ll, BFu0s_BFu1i_BFu0ll)
//============================================================================


struct  BFu0s_BFu1i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu1i_BFu0s) C1{ Fs:0 Fi:1 Fs:0}



static void Test_BFu0s_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu0s, BFu0s_BFu1i_BFu0s)
//============================================================================


struct  BFu0s_BFu1i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu1i_BFu15i) C1{ Fs:0 Fi:1 Fi:15}



static void Test_BFu0s_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu15i, BFu0s_BFu1i_BFu15i)
//============================================================================


struct  BFu0s_BFu1i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu1i_BFu15ll) C1{ Fs:0 Fi:1 FL:15}



static void Test_BFu0s_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu15ll, BFu0s_BFu1i_BFu15ll)
//============================================================================


struct  BFu0s_BFu1i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu1i_BFu15s) C1{ Fs:0 Fi:1 Fs:15}



static void Test_BFu0s_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu15s, BFu0s_BFu1i_BFu15s)
//============================================================================


struct  BFu0s_BFu1i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu1i_BFu16i) C1{ Fs:0 Fi:1 Fi:16}



static void Test_BFu0s_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0s_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu16i, BFu0s_BFu1i_BFu16i)
//============================================================================


struct  BFu0s_BFu1i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu1i_BFu16ll) C1{ Fs:0 Fi:1 FL:16}



static void Test_BFu0s_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu16ll, BFu0s_BFu1i_BFu16ll)
//============================================================================


struct  BFu0s_BFu1i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu1i_BFu16s) C1{ Fs:0 Fi:1 Fs:16}



static void Test_BFu0s_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu16s, BFu0s_BFu1i_BFu16s)
//============================================================================


struct  BFu0s_BFu1i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu1i_BFu17i) C1{ Fs:0 Fi:1 Fi:17}



static void Test_BFu0s_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0s_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu17i, BFu0s_BFu1i_BFu17i)
//============================================================================


struct  BFu0s_BFu1i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu1i_BFu17ll) C1{ Fs:0 Fi:1 FL:17}



static void Test_BFu0s_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu17ll, BFu0s_BFu1i_BFu17ll)
//============================================================================


struct  BFu0s_BFu1i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu1i_BFu1c) C1{ Fs:0 Fi:1 Fc:1}



static void Test_BFu0s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu1c, BFu0s_BFu1i_BFu1c)
//============================================================================


struct  BFu0s_BFu1i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu1i_BFu1i) C1{ Fs:0 Fi:1 Fi:1}



static void Test_BFu0s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu1i, BFu0s_BFu1i_BFu1i)
//============================================================================


struct  BFu0s_BFu1i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu1i_BFu1ll) C1{ Fs:0 Fi:1 FL:1}



static void Test_BFu0s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu1ll, BFu0s_BFu1i_BFu1ll)
//============================================================================


struct  BFu0s_BFu1i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu1i_BFu1s) C1{ Fs:0 Fi:1 Fs:1}



static void Test_BFu0s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu1s, BFu0s_BFu1i_BFu1s)
//============================================================================


struct  BFu0s_BFu1i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu1i_BFu31i) C1{ Fs:0 Fi:1 Fi:31}



static void Test_BFu0s_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0s_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu31i, BFu0s_BFu1i_BFu31i)
//============================================================================


struct  BFu0s_BFu1i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu1i_BFu31ll) C1{ Fs:0 Fi:1 FL:31}



static void Test_BFu0s_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu31ll, BFu0s_BFu1i_BFu31ll)
//============================================================================


struct  BFu0s_BFu1i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu1i_BFu32i) C1{ Fs:0 Fi:1 Fi:32}



static void Test_BFu0s_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu32i, BFu0s_BFu1i_BFu32i)
//============================================================================


struct  BFu0s_BFu1i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu1i_BFu32ll) C1{ Fs:0 Fi:1 FL:32}



static void Test_BFu0s_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu0s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu32ll, BFu0s_BFu1i_BFu32ll)
//============================================================================


struct  BFu0s_BFu1i_BFu33  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu1i_BFu33) C1{ Fs:0 Fi:1 FL:33}



static void Test_BFu0s_BFu1i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu33");
    static STRUCT_IF_C BFu0s_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu0s_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu33, BFu0s_BFu1i_BFu33)
//============================================================================


struct  BFu0s_BFu1i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu1i_BFu7c) C1{ Fs:0 Fi:1 Fc:7}



static void Test_BFu0s_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu7c, BFu0s_BFu1i_BFu7c)
//============================================================================


struct  BFu0s_BFu1i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu1i_BFu7i) C1{ Fs:0 Fi:1 Fi:7}



static void Test_BFu0s_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu7i, BFu0s_BFu1i_BFu7i)
//============================================================================


struct  BFu0s_BFu1i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu1i_BFu7ll) C1{ Fs:0 Fi:1 FL:7}



static void Test_BFu0s_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu7ll, BFu0s_BFu1i_BFu7ll)
//============================================================================


struct  BFu0s_BFu1i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu1i_BFu7s) C1{ Fs:0 Fi:1 Fs:7}



static void Test_BFu0s_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu7s, BFu0s_BFu1i_BFu7s)
//============================================================================


struct  BFu0s_BFu1i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu1i_BFu8c) C1{ Fs:0 Fi:1 Fc:8}



static void Test_BFu0s_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu8c, BFu0s_BFu1i_BFu8c)
//============================================================================


struct  BFu0s_BFu1i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu1i_BFu8i) C1{ Fs:0 Fi:1 Fi:8}



static void Test_BFu0s_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu8i, BFu0s_BFu1i_BFu8i)
//============================================================================


struct  BFu0s_BFu1i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu1i_BFu8ll) C1{ Fs:0 Fi:1 FL:8}



static void Test_BFu0s_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu8ll, BFu0s_BFu1i_BFu8ll)
//============================================================================


struct  BFu0s_BFu1i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu1i_BFu8s) C1{ Fs:0 Fi:1 Fs:8}



static void Test_BFu0s_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu8s, BFu0s_BFu1i_BFu8s)
//============================================================================


struct  BFu0s_BFu1i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu1i_BFu9i) C1{ Fs:0 Fi:1 Fi:9}



static void Test_BFu0s_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu9i, BFu0s_BFu1i_BFu9i)
//============================================================================


struct  BFu0s_BFu1i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu1i_BFu9ll) C1{ Fs:0 Fi:1 FL:9}



static void Test_BFu0s_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu9ll, BFu0s_BFu1i_BFu9ll)
//============================================================================


struct  BFu0s_BFu1i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu1i_BFu9s) C1{ Fs:0 Fi:1 Fs:9}



static void Test_BFu0s_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu1i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_BFu9s, BFu0s_BFu1i_BFu9s)
//============================================================================


struct  BFu0s_BFu1i_C  {
  unsigned short  :0;
  unsigned int v1:1;
  char v2;
};
//SIG(1 BFu0s_BFu1i_C) C1{ Fs:0 Fi:1 Fc}



static void Test_BFu0s_BFu1i_C()
{
  {
    init_simple_test("BFu0s_BFu1i_C");
    static STRUCT_IF_C BFu0s_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu1i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_C, BFu0s_BFu1i_C)
//============================================================================


struct  BFu0s_BFu1i_D  {
  unsigned short  :0;
  unsigned int v1:1;
  double v2;
};
//SIG(1 BFu0s_BFu1i_D) C1{ Fs:0 Fi:1 FL}



static void Test_BFu0s_BFu1i_D()
{
  {
    init_simple_test("BFu0s_BFu1i_D");
    static STRUCT_IF_C BFu0s_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_D, BFu0s_BFu1i_D)
//============================================================================


struct  BFu0s_BFu1i_F  {
  unsigned short  :0;
  unsigned int v1:1;
  float v2;
};
//SIG(1 BFu0s_BFu1i_F) C1{ Fs:0 Fi:1 Fi}



static void Test_BFu0s_BFu1i_F()
{
  {
    init_simple_test("BFu0s_BFu1i_F");
    static STRUCT_IF_C BFu0s_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_F, BFu0s_BFu1i_F)
//============================================================================


struct  BFu0s_BFu1i_I  {
  unsigned short  :0;
  unsigned int v1:1;
  int v2;
};
//SIG(1 BFu0s_BFu1i_I) C1{ Fs:0 Fi:1 Fi}



static void Test_BFu0s_BFu1i_I()
{
  {
    init_simple_test("BFu0s_BFu1i_I");
    static STRUCT_IF_C BFu0s_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_I, BFu0s_BFu1i_I)
//============================================================================


struct  BFu0s_BFu1i_Ip  {
  unsigned short  :0;
  unsigned int v1:1;
  int *v2;
};
//SIG(1 BFu0s_BFu1i_Ip) C1{ Fs:0 Fi:1 Fp}



static void Test_BFu0s_BFu1i_Ip()
{
  {
    init_simple_test("BFu0s_BFu1i_Ip");
    static STRUCT_IF_C BFu0s_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_Ip, BFu0s_BFu1i_Ip)
//============================================================================


struct  BFu0s_BFu1i_L  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu1i_L) C1{ Fs:0 Fi:1 FL}



static void Test_BFu0s_BFu1i_L()
{
  {
    init_simple_test("BFu0s_BFu1i_L");
    static STRUCT_IF_C BFu0s_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_L, BFu0s_BFu1i_L)
//============================================================================


struct  BFu0s_BFu1i_S  {
  unsigned short  :0;
  unsigned int v1:1;
  short v2;
};
//SIG(1 BFu0s_BFu1i_S) C1{ Fs:0 Fi:1 Fs}



static void Test_BFu0s_BFu1i_S()
{
  {
    init_simple_test("BFu0s_BFu1i_S");
    static STRUCT_IF_C BFu0s_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu1i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_S, BFu0s_BFu1i_S)
//============================================================================


struct  BFu0s_BFu1i_Uc  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu1i_Uc) C1{ Fs:0 Fi:1 Fc}



static void Test_BFu0s_BFu1i_Uc()
{
  {
    init_simple_test("BFu0s_BFu1i_Uc");
    static STRUCT_IF_C BFu0s_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu1i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_Uc, BFu0s_BFu1i_Uc)
//============================================================================


struct  BFu0s_BFu1i_Ui  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu1i_Ui) C1{ Fs:0 Fi:1 Fi}



static void Test_BFu0s_BFu1i_Ui()
{
  {
    init_simple_test("BFu0s_BFu1i_Ui");
    static STRUCT_IF_C BFu0s_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_Ui, BFu0s_BFu1i_Ui)
//============================================================================


struct  BFu0s_BFu1i_Ul  {
  unsigned short  :0;
  unsigned int v1:1;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu1i_Ul) C1{ Fs:0 Fi:1 FL}



static void Test_BFu0s_BFu1i_Ul()
{
  {
    init_simple_test("BFu0s_BFu1i_Ul");
    static STRUCT_IF_C BFu0s_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_Ul, BFu0s_BFu1i_Ul)
//============================================================================


struct  BFu0s_BFu1i_Us  {
  unsigned short  :0;
  unsigned int v1:1;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu1i_Us) C1{ Fs:0 Fi:1 Fs}



static void Test_BFu0s_BFu1i_Us()
{
  {
    init_simple_test("BFu0s_BFu1i_Us");
    static STRUCT_IF_C BFu0s_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu1i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_Us, BFu0s_BFu1i_Us)
//============================================================================


struct  BFu0s_BFu1i_Vp  {
  unsigned short  :0;
  unsigned int v1:1;
  void *v2;
};
//SIG(1 BFu0s_BFu1i_Vp) C1{ Fs:0 Fi:1 Fp}



static void Test_BFu0s_BFu1i_Vp()
{
  {
    init_simple_test("BFu0s_BFu1i_Vp");
    static STRUCT_IF_C BFu0s_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1i_Vp, BFu0s_BFu1i_Vp)
//============================================================================


struct  BFu0s_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:1;
};
//SIG(1 BFu0s_BFu1ll) C1{ Fs:0 FL:1}



static void Test_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll, BFu0s_BFu1ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu1ll_BFu0c) C1{ Fs:0 FL:1 Fc:0}



static void Test_BFu0s_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu0c, BFu0s_BFu1ll_BFu0c)
//============================================================================


struct  BFu0s_BFu1ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu1ll_BFu0i) C1{ Fs:0 FL:1 Fi:0}



static void Test_BFu0s_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu0i, BFu0s_BFu1ll_BFu0i)
//============================================================================


struct  BFu0s_BFu1ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu1ll_BFu0ll) C1{ Fs:0 FL:1 FL:0}



static void Test_BFu0s_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu0ll, BFu0s_BFu1ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu1ll_BFu0s) C1{ Fs:0 FL:1 Fs:0}



static void Test_BFu0s_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu0s, BFu0s_BFu1ll_BFu0s)
//============================================================================


struct  BFu0s_BFu1ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu1ll_BFu15i) C1{ Fs:0 FL:1 Fi:15}



static void Test_BFu0s_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu15i, BFu0s_BFu1ll_BFu15i)
//============================================================================


struct  BFu0s_BFu1ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu1ll_BFu15ll) C1{ Fs:0 FL:1 FL:15}



static void Test_BFu0s_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu15ll, BFu0s_BFu1ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu1ll_BFu15s) C1{ Fs:0 FL:1 Fs:15}



static void Test_BFu0s_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu15s, BFu0s_BFu1ll_BFu15s)
//============================================================================


struct  BFu0s_BFu1ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu1ll_BFu16i) C1{ Fs:0 FL:1 Fi:16}



static void Test_BFu0s_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu16i, BFu0s_BFu1ll_BFu16i)
//============================================================================


struct  BFu0s_BFu1ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu1ll_BFu16ll) C1{ Fs:0 FL:1 FL:16}



static void Test_BFu0s_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu16ll, BFu0s_BFu1ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu1ll_BFu16s) C1{ Fs:0 FL:1 Fs:16}



static void Test_BFu0s_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu16s, BFu0s_BFu1ll_BFu16s)
//============================================================================


struct  BFu0s_BFu1ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu1ll_BFu17i) C1{ Fs:0 FL:1 Fi:17}



static void Test_BFu0s_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu17i, BFu0s_BFu1ll_BFu17i)
//============================================================================


struct  BFu0s_BFu1ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu1ll_BFu17ll) C1{ Fs:0 FL:1 FL:17}



static void Test_BFu0s_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu17ll, BFu0s_BFu1ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu1ll_BFu1c) C1{ Fs:0 FL:1 Fc:1}



static void Test_BFu0s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu1c, BFu0s_BFu1ll_BFu1c)
//============================================================================


struct  BFu0s_BFu1ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu1ll_BFu1i) C1{ Fs:0 FL:1 Fi:1}



static void Test_BFu0s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu1i, BFu0s_BFu1ll_BFu1i)
//============================================================================


struct  BFu0s_BFu1ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu1ll_BFu1ll) C1{ Fs:0 FL:1 FL:1}



static void Test_BFu0s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu1ll, BFu0s_BFu1ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu1ll_BFu1s) C1{ Fs:0 FL:1 Fs:1}



static void Test_BFu0s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu1s, BFu0s_BFu1ll_BFu1s)
//============================================================================


struct  BFu0s_BFu1ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu1ll_BFu31i) C1{ Fs:0 FL:1 Fi:31}



static void Test_BFu0s_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu31i, BFu0s_BFu1ll_BFu31i)
//============================================================================


struct  BFu0s_BFu1ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu1ll_BFu31ll) C1{ Fs:0 FL:1 FL:31}



static void Test_BFu0s_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu31ll, BFu0s_BFu1ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu1ll_BFu32i) C1{ Fs:0 FL:1 Fi:32}



static void Test_BFu0s_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu32i, BFu0s_BFu1ll_BFu32i)
//============================================================================


struct  BFu0s_BFu1ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu1ll_BFu32ll) C1{ Fs:0 FL:1 FL:32}



static void Test_BFu0s_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu0s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu32ll, BFu0s_BFu1ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu1ll_BFu33) C1{ Fs:0 FL:1 FL:33}



static void Test_BFu0s_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu0s_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu33, BFu0s_BFu1ll_BFu33)
//============================================================================


struct  BFu0s_BFu1ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu1ll_BFu7c) C1{ Fs:0 FL:1 Fc:7}



static void Test_BFu0s_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu7c, BFu0s_BFu1ll_BFu7c)
//============================================================================


struct  BFu0s_BFu1ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu1ll_BFu7i) C1{ Fs:0 FL:1 Fi:7}



static void Test_BFu0s_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu7i, BFu0s_BFu1ll_BFu7i)
//============================================================================


struct  BFu0s_BFu1ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu1ll_BFu7ll) C1{ Fs:0 FL:1 FL:7}



static void Test_BFu0s_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu7ll, BFu0s_BFu1ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu1ll_BFu7s) C1{ Fs:0 FL:1 Fs:7}



static void Test_BFu0s_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu7s, BFu0s_BFu1ll_BFu7s)
//============================================================================


struct  BFu0s_BFu1ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu1ll_BFu8c) C1{ Fs:0 FL:1 Fc:8}



static void Test_BFu0s_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu8c, BFu0s_BFu1ll_BFu8c)
//============================================================================


struct  BFu0s_BFu1ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu1ll_BFu8i) C1{ Fs:0 FL:1 Fi:8}



static void Test_BFu0s_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu8i, BFu0s_BFu1ll_BFu8i)
//============================================================================


struct  BFu0s_BFu1ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu1ll_BFu8ll) C1{ Fs:0 FL:1 FL:8}



static void Test_BFu0s_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu8ll, BFu0s_BFu1ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu1ll_BFu8s) C1{ Fs:0 FL:1 Fs:8}



static void Test_BFu0s_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu8s, BFu0s_BFu1ll_BFu8s)
//============================================================================


struct  BFu0s_BFu1ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu1ll_BFu9i) C1{ Fs:0 FL:1 Fi:9}



static void Test_BFu0s_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu9i, BFu0s_BFu1ll_BFu9i)
//============================================================================


struct  BFu0s_BFu1ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu1ll_BFu9ll) C1{ Fs:0 FL:1 FL:9}



static void Test_BFu0s_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu9ll, BFu0s_BFu1ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu1ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu1ll_BFu9s) C1{ Fs:0 FL:1 Fs:9}



static void Test_BFu0s_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_BFu9s, BFu0s_BFu1ll_BFu9s)
//============================================================================


struct  BFu0s_BFu1ll_C  {
  unsigned short  :0;
  __tsu64 v1:1;
  char v2;
};
//SIG(1 BFu0s_BFu1ll_C) C1{ Fs:0 FL:1 Fc}



static void Test_BFu0s_BFu1ll_C()
{
  {
    init_simple_test("BFu0s_BFu1ll_C");
    static STRUCT_IF_C BFu0s_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu1ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_C, BFu0s_BFu1ll_C)
//============================================================================


struct  BFu0s_BFu1ll_D  {
  unsigned short  :0;
  __tsu64 v1:1;
  double v2;
};
//SIG(1 BFu0s_BFu1ll_D) C1{ Fs:0 FL:1 FL}



static void Test_BFu0s_BFu1ll_D()
{
  {
    init_simple_test("BFu0s_BFu1ll_D");
    static STRUCT_IF_C BFu0s_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_D, BFu0s_BFu1ll_D)
//============================================================================


struct  BFu0s_BFu1ll_F  {
  unsigned short  :0;
  __tsu64 v1:1;
  float v2;
};
//SIG(1 BFu0s_BFu1ll_F) C1{ Fs:0 FL:1 Fi}



static void Test_BFu0s_BFu1ll_F()
{
  {
    init_simple_test("BFu0s_BFu1ll_F");
    static STRUCT_IF_C BFu0s_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_F, BFu0s_BFu1ll_F)
//============================================================================


struct  BFu0s_BFu1ll_I  {
  unsigned short  :0;
  __tsu64 v1:1;
  int v2;
};
//SIG(1 BFu0s_BFu1ll_I) C1{ Fs:0 FL:1 Fi}



static void Test_BFu0s_BFu1ll_I()
{
  {
    init_simple_test("BFu0s_BFu1ll_I");
    static STRUCT_IF_C BFu0s_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_I, BFu0s_BFu1ll_I)
//============================================================================


struct  BFu0s_BFu1ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:1;
  int *v2;
};
//SIG(1 BFu0s_BFu1ll_Ip) C1{ Fs:0 FL:1 Fp}



static void Test_BFu0s_BFu1ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu1ll_Ip");
    static STRUCT_IF_C BFu0s_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_Ip, BFu0s_BFu1ll_Ip)
//============================================================================


struct  BFu0s_BFu1ll_L  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu1ll_L) C1{ Fs:0 FL:1 FL}



static void Test_BFu0s_BFu1ll_L()
{
  {
    init_simple_test("BFu0s_BFu1ll_L");
    static STRUCT_IF_C BFu0s_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_L, BFu0s_BFu1ll_L)
//============================================================================


struct  BFu0s_BFu1ll_S  {
  unsigned short  :0;
  __tsu64 v1:1;
  short v2;
};
//SIG(1 BFu0s_BFu1ll_S) C1{ Fs:0 FL:1 Fs}



static void Test_BFu0s_BFu1ll_S()
{
  {
    init_simple_test("BFu0s_BFu1ll_S");
    static STRUCT_IF_C BFu0s_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu1ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_S, BFu0s_BFu1ll_S)
//============================================================================


struct  BFu0s_BFu1ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu1ll_Uc) C1{ Fs:0 FL:1 Fc}



static void Test_BFu0s_BFu1ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu1ll_Uc");
    static STRUCT_IF_C BFu0s_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu1ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_Uc, BFu0s_BFu1ll_Uc)
//============================================================================


struct  BFu0s_BFu1ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu1ll_Ui) C1{ Fs:0 FL:1 Fi}



static void Test_BFu0s_BFu1ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu1ll_Ui");
    static STRUCT_IF_C BFu0s_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_Ui, BFu0s_BFu1ll_Ui)
//============================================================================


struct  BFu0s_BFu1ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:1;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu1ll_Ul) C1{ Fs:0 FL:1 FL}



static void Test_BFu0s_BFu1ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu1ll_Ul");
    static STRUCT_IF_C BFu0s_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_Ul, BFu0s_BFu1ll_Ul)
//============================================================================


struct  BFu0s_BFu1ll_Us  {
  unsigned short  :0;
  __tsu64 v1:1;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu1ll_Us) C1{ Fs:0 FL:1 Fs}



static void Test_BFu0s_BFu1ll_Us()
{
  {
    init_simple_test("BFu0s_BFu1ll_Us");
    static STRUCT_IF_C BFu0s_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu1ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_Us, BFu0s_BFu1ll_Us)
//============================================================================


struct  BFu0s_BFu1ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:1;
  void *v2;
};
//SIG(1 BFu0s_BFu1ll_Vp) C1{ Fs:0 FL:1 Fp}



static void Test_BFu0s_BFu1ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu1ll_Vp");
    static STRUCT_IF_C BFu0s_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1ll_Vp, BFu0s_BFu1ll_Vp)
//============================================================================


struct  BFu0s_BFu1s  {
  unsigned short  :0;
  unsigned short v1:1;
};
//SIG(1 BFu0s_BFu1s) C1{ Fs:0 Fs:1}



static void Test_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu1s");
    static STRUCT_IF_C BFu0s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s, BFu0s_BFu1s)
//============================================================================


struct  BFu0s_BFu1s_BFu0c  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu1s_BFu0c) C1{ Fs:0 Fs:1 Fc:0}



static void Test_BFu0s_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu0c, BFu0s_BFu1s_BFu0c)
//============================================================================


struct  BFu0s_BFu1s_BFu0i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu1s_BFu0i) C1{ Fs:0 Fs:1 Fi:0}



static void Test_BFu0s_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu0i, BFu0s_BFu1s_BFu0i)
//============================================================================


struct  BFu0s_BFu1s_BFu0ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu1s_BFu0ll) C1{ Fs:0 Fs:1 FL:0}



static void Test_BFu0s_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu0ll, BFu0s_BFu1s_BFu0ll)
//============================================================================


struct  BFu0s_BFu1s_BFu0s  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu1s_BFu0s) C1{ Fs:0 Fs:1 Fs:0}



static void Test_BFu0s_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu0s, BFu0s_BFu1s_BFu0s)
//============================================================================


struct  BFu0s_BFu1s_BFu15i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu1s_BFu15i) C1{ Fs:0 Fs:1 Fi:15}



static void Test_BFu0s_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu15i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu15i, BFu0s_BFu1s_BFu15i)
//============================================================================


struct  BFu0s_BFu1s_BFu15ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu1s_BFu15ll) C1{ Fs:0 Fs:1 FL:15}



static void Test_BFu0s_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu15ll, BFu0s_BFu1s_BFu15ll)
//============================================================================


struct  BFu0s_BFu1s_BFu15s  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu1s_BFu15s) C1{ Fs:0 Fs:1 Fs:15}



static void Test_BFu0s_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu15s");
    static STRUCT_IF_C BFu0s_BFu1s_BFu15s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu0s_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu15s, BFu0s_BFu1s_BFu15s)
//============================================================================


struct  BFu0s_BFu1s_BFu16i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu1s_BFu16i) C1{ Fs:0 Fs:1 Fi:16}



static void Test_BFu0s_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu16i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0s_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu16i, BFu0s_BFu1s_BFu16i)
//============================================================================


struct  BFu0s_BFu1s_BFu16ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu1s_BFu16ll) C1{ Fs:0 Fs:1 FL:16}



static void Test_BFu0s_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu0s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu16ll, BFu0s_BFu1s_BFu16ll)
//============================================================================


struct  BFu0s_BFu1s_BFu16s  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu1s_BFu16s) C1{ Fs:0 Fs:1 Fs:16}



static void Test_BFu0s_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu16s");
    static STRUCT_IF_C BFu0s_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu16s, BFu0s_BFu1s_BFu16s)
//============================================================================


struct  BFu0s_BFu1s_BFu17i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu1s_BFu17i) C1{ Fs:0 Fs:1 Fi:17}



static void Test_BFu0s_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu17i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0s_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu17i, BFu0s_BFu1s_BFu17i)
//============================================================================


struct  BFu0s_BFu1s_BFu17ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu1s_BFu17ll) C1{ Fs:0 Fs:1 FL:17}



static void Test_BFu0s_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu0s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu17ll, BFu0s_BFu1s_BFu17ll)
//============================================================================


struct  BFu0s_BFu1s_BFu1c  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu1s_BFu1c) C1{ Fs:0 Fs:1 Fc:1}



static void Test_BFu0s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu1c");
    static STRUCT_IF_C BFu0s_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu1c, BFu0s_BFu1s_BFu1c)
//============================================================================


struct  BFu0s_BFu1s_BFu1i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu1s_BFu1i) C1{ Fs:0 Fs:1 Fi:1}



static void Test_BFu0s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu1i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu1i, BFu0s_BFu1s_BFu1i)
//============================================================================


struct  BFu0s_BFu1s_BFu1ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu1s_BFu1ll) C1{ Fs:0 Fs:1 FL:1}



static void Test_BFu0s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu1ll, BFu0s_BFu1s_BFu1ll)
//============================================================================


struct  BFu0s_BFu1s_BFu1s  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu1s_BFu1s) C1{ Fs:0 Fs:1 Fs:1}



static void Test_BFu0s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu1s");
    static STRUCT_IF_C BFu0s_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu0s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu1s, BFu0s_BFu1s_BFu1s)
//============================================================================


struct  BFu0s_BFu1s_BFu31i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu1s_BFu31i) C1{ Fs:0 Fs:1 Fi:31}



static void Test_BFu0s_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu31i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0s_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu31i, BFu0s_BFu1s_BFu31i)
//============================================================================


struct  BFu0s_BFu1s_BFu31ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu1s_BFu31ll) C1{ Fs:0 Fs:1 FL:31}



static void Test_BFu0s_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu0s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu31ll, BFu0s_BFu1s_BFu31ll)
//============================================================================


struct  BFu0s_BFu1s_BFu32i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu1s_BFu32i) C1{ Fs:0 Fs:1 Fi:32}



static void Test_BFu0s_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu32i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu32i, BFu0s_BFu1s_BFu32i)
//============================================================================


struct  BFu0s_BFu1s_BFu32ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu1s_BFu32ll) C1{ Fs:0 Fs:1 FL:32}



static void Test_BFu0s_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu0s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu32ll, BFu0s_BFu1s_BFu32ll)
//============================================================================


struct  BFu0s_BFu1s_BFu33  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu1s_BFu33) C1{ Fs:0 Fs:1 FL:33}



static void Test_BFu0s_BFu1s_BFu33()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu33");
    static STRUCT_IF_C BFu0s_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu0s_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu33, BFu0s_BFu1s_BFu33)
//============================================================================


struct  BFu0s_BFu1s_BFu7c  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu1s_BFu7c) C1{ Fs:0 Fs:1 Fc:7}



static void Test_BFu0s_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu7c");
    static STRUCT_IF_C BFu0s_BFu1s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu7c, BFu0s_BFu1s_BFu7c)
//============================================================================


struct  BFu0s_BFu1s_BFu7i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu1s_BFu7i) C1{ Fs:0 Fs:1 Fi:7}



static void Test_BFu0s_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu7i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu7i, BFu0s_BFu1s_BFu7i)
//============================================================================


struct  BFu0s_BFu1s_BFu7ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu1s_BFu7ll) C1{ Fs:0 Fs:1 FL:7}



static void Test_BFu0s_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu7ll, BFu0s_BFu1s_BFu7ll)
//============================================================================


struct  BFu0s_BFu1s_BFu7s  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu1s_BFu7s) C1{ Fs:0 Fs:1 Fs:7}



static void Test_BFu0s_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu7s");
    static STRUCT_IF_C BFu0s_BFu1s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu0s_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu7s, BFu0s_BFu1s_BFu7s)
//============================================================================


struct  BFu0s_BFu1s_BFu8c  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu1s_BFu8c) C1{ Fs:0 Fs:1 Fc:8}



static void Test_BFu0s_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu8c");
    static STRUCT_IF_C BFu0s_BFu1s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu8c, BFu0s_BFu1s_BFu8c)
//============================================================================


struct  BFu0s_BFu1s_BFu8i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu1s_BFu8i) C1{ Fs:0 Fs:1 Fi:8}



static void Test_BFu0s_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu8i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu8i, BFu0s_BFu1s_BFu8i)
//============================================================================


struct  BFu0s_BFu1s_BFu8ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu1s_BFu8ll) C1{ Fs:0 Fs:1 FL:8}



static void Test_BFu0s_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu8ll, BFu0s_BFu1s_BFu8ll)
//============================================================================


struct  BFu0s_BFu1s_BFu8s  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu1s_BFu8s) C1{ Fs:0 Fs:1 Fs:8}



static void Test_BFu0s_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu8s");
    static STRUCT_IF_C BFu0s_BFu1s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu0s_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu8s, BFu0s_BFu1s_BFu8s)
//============================================================================


struct  BFu0s_BFu1s_BFu9i  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu1s_BFu9i) C1{ Fs:0 Fs:1 Fi:9}



static void Test_BFu0s_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu9i");
    static STRUCT_IF_C BFu0s_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu9i, BFu0s_BFu1s_BFu9i)
//============================================================================


struct  BFu0s_BFu1s_BFu9ll  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu1s_BFu9ll) C1{ Fs:0 Fs:1 FL:9}



static void Test_BFu0s_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu9ll, BFu0s_BFu1s_BFu9ll)
//============================================================================


struct  BFu0s_BFu1s_BFu9s  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu1s_BFu9s) C1{ Fs:0 Fs:1 Fs:9}



static void Test_BFu0s_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu1s_BFu9s");
    static STRUCT_IF_C BFu0s_BFu1s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu0s_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_BFu9s, BFu0s_BFu1s_BFu9s)
//============================================================================


struct  BFu0s_BFu1s_C  {
  unsigned short  :0;
  unsigned short v1:1;
  char v2;
};
//SIG(1 BFu0s_BFu1s_C) C1{ Fs:0 Fs:1 Fc}



static void Test_BFu0s_BFu1s_C()
{
  {
    init_simple_test("BFu0s_BFu1s_C");
    static STRUCT_IF_C BFu0s_BFu1s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu1s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_C, BFu0s_BFu1s_C)
//============================================================================


struct  BFu0s_BFu1s_D  {
  unsigned short  :0;
  unsigned short v1:1;
  double v2;
};
//SIG(1 BFu0s_BFu1s_D) C1{ Fs:0 Fs:1 FL}



static void Test_BFu0s_BFu1s_D()
{
  {
    init_simple_test("BFu0s_BFu1s_D");
    static STRUCT_IF_C BFu0s_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_D, BFu0s_BFu1s_D)
//============================================================================


struct  BFu0s_BFu1s_F  {
  unsigned short  :0;
  unsigned short v1:1;
  float v2;
};
//SIG(1 BFu0s_BFu1s_F) C1{ Fs:0 Fs:1 Fi}



static void Test_BFu0s_BFu1s_F()
{
  {
    init_simple_test("BFu0s_BFu1s_F");
    static STRUCT_IF_C BFu0s_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_F, BFu0s_BFu1s_F)
//============================================================================


struct  BFu0s_BFu1s_I  {
  unsigned short  :0;
  unsigned short v1:1;
  int v2;
};
//SIG(1 BFu0s_BFu1s_I) C1{ Fs:0 Fs:1 Fi}



static void Test_BFu0s_BFu1s_I()
{
  {
    init_simple_test("BFu0s_BFu1s_I");
    static STRUCT_IF_C BFu0s_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_I, BFu0s_BFu1s_I)
//============================================================================


struct  BFu0s_BFu1s_Ip  {
  unsigned short  :0;
  unsigned short v1:1;
  int *v2;
};
//SIG(1 BFu0s_BFu1s_Ip) C1{ Fs:0 Fs:1 Fp}



static void Test_BFu0s_BFu1s_Ip()
{
  {
    init_simple_test("BFu0s_BFu1s_Ip");
    static STRUCT_IF_C BFu0s_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_Ip, BFu0s_BFu1s_Ip)
//============================================================================


struct  BFu0s_BFu1s_L  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu1s_L) C1{ Fs:0 Fs:1 FL}



static void Test_BFu0s_BFu1s_L()
{
  {
    init_simple_test("BFu0s_BFu1s_L");
    static STRUCT_IF_C BFu0s_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_L, BFu0s_BFu1s_L)
//============================================================================


struct  BFu0s_BFu1s_S  {
  unsigned short  :0;
  unsigned short v1:1;
  short v2;
};
//SIG(1 BFu0s_BFu1s_S) C1{ Fs:0 Fs:1 Fs}



static void Test_BFu0s_BFu1s_S()
{
  {
    init_simple_test("BFu0s_BFu1s_S");
    static STRUCT_IF_C BFu0s_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu1s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_S, BFu0s_BFu1s_S)
//============================================================================


struct  BFu0s_BFu1s_Uc  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu1s_Uc) C1{ Fs:0 Fs:1 Fc}



static void Test_BFu0s_BFu1s_Uc()
{
  {
    init_simple_test("BFu0s_BFu1s_Uc");
    static STRUCT_IF_C BFu0s_BFu1s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu1s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_Uc, BFu0s_BFu1s_Uc)
//============================================================================


struct  BFu0s_BFu1s_Ui  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu1s_Ui) C1{ Fs:0 Fs:1 Fi}



static void Test_BFu0s_BFu1s_Ui()
{
  {
    init_simple_test("BFu0s_BFu1s_Ui");
    static STRUCT_IF_C BFu0s_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu1s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_Ui, BFu0s_BFu1s_Ui)
//============================================================================


struct  BFu0s_BFu1s_Ul  {
  unsigned short  :0;
  unsigned short v1:1;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu1s_Ul) C1{ Fs:0 Fs:1 FL}



static void Test_BFu0s_BFu1s_Ul()
{
  {
    init_simple_test("BFu0s_BFu1s_Ul");
    static STRUCT_IF_C BFu0s_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_Ul, BFu0s_BFu1s_Ul)
//============================================================================


struct  BFu0s_BFu1s_Us  {
  unsigned short  :0;
  unsigned short v1:1;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu1s_Us) C1{ Fs:0 Fs:1 Fs}



static void Test_BFu0s_BFu1s_Us()
{
  {
    init_simple_test("BFu0s_BFu1s_Us");
    static STRUCT_IF_C BFu0s_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu1s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_Us, BFu0s_BFu1s_Us)
//============================================================================


struct  BFu0s_BFu1s_Vp  {
  unsigned short  :0;
  unsigned short v1:1;
  void *v2;
};
//SIG(1 BFu0s_BFu1s_Vp) C1{ Fs:0 Fs:1 Fp}



static void Test_BFu0s_BFu1s_Vp()
{
  {
    init_simple_test("BFu0s_BFu1s_Vp");
    static STRUCT_IF_C BFu0s_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu0s_BFu1s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu1s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu1s_Vp, BFu0s_BFu1s_Vp)
//============================================================================


struct  BFu0s_BFu31i  {
  unsigned short  :0;
  unsigned int v1:31;
};
//SIG(1 BFu0s_BFu31i) C1{ Fs:0 Fi:31}



static void Test_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu31i");
    static STRUCT_IF_C BFu0s_BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i, BFu0s_BFu31i)
//============================================================================


struct  BFu0s_BFu31i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu31i_BFu0c) C1{ Fs:0 Fi:31 Fc:0}



static void Test_BFu0s_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu31i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu0c, BFu0s_BFu31i_BFu0c)
//============================================================================


struct  BFu0s_BFu31i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu31i_BFu0i) C1{ Fs:0 Fi:31 Fi:0}



static void Test_BFu0s_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu0i, BFu0s_BFu31i_BFu0i)
//============================================================================


struct  BFu0s_BFu31i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu31i_BFu0ll) C1{ Fs:0 Fi:31 FL:0}



static void Test_BFu0s_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu0ll, BFu0s_BFu31i_BFu0ll)
//============================================================================


struct  BFu0s_BFu31i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu31i_BFu0s) C1{ Fs:0 Fi:31 Fs:0}



static void Test_BFu0s_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu31i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu0s, BFu0s_BFu31i_BFu0s)
//============================================================================


struct  BFu0s_BFu31i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu31i_BFu15i) C1{ Fs:0 Fi:31 Fi:15}



static void Test_BFu0s_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu15i, BFu0s_BFu31i_BFu15i)
//============================================================================


struct  BFu0s_BFu31i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu31i_BFu15ll) C1{ Fs:0 Fi:31 FL:15}



static void Test_BFu0s_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu0s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu15ll, BFu0s_BFu31i_BFu15ll)
//============================================================================


struct  BFu0s_BFu31i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu31i_BFu15s) C1{ Fs:0 Fi:31 Fs:15}



static void Test_BFu0s_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu31i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu15s, BFu0s_BFu31i_BFu15s)
//============================================================================


struct  BFu0s_BFu31i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu31i_BFu16i) C1{ Fs:0 Fi:31 Fi:16}



static void Test_BFu0s_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu16i, BFu0s_BFu31i_BFu16i)
//============================================================================


struct  BFu0s_BFu31i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu31i_BFu16ll) C1{ Fs:0 Fi:31 FL:16}



static void Test_BFu0s_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu0s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu16ll, BFu0s_BFu31i_BFu16ll)
//============================================================================


struct  BFu0s_BFu31i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu31i_BFu16s) C1{ Fs:0 Fi:31 Fs:16}



static void Test_BFu0s_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu31i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu16s, BFu0s_BFu31i_BFu16s)
//============================================================================


struct  BFu0s_BFu31i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu31i_BFu17i) C1{ Fs:0 Fi:31 Fi:17}



static void Test_BFu0s_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu17i, BFu0s_BFu31i_BFu17i)
//============================================================================


struct  BFu0s_BFu31i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu31i_BFu17ll) C1{ Fs:0 Fi:31 FL:17}



static void Test_BFu0s_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu0s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu17ll, BFu0s_BFu31i_BFu17ll)
//============================================================================


struct  BFu0s_BFu31i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu31i_BFu1c) C1{ Fs:0 Fi:31 Fc:1}



static void Test_BFu0s_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu31i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0s_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu1c, BFu0s_BFu31i_BFu1c)
//============================================================================


struct  BFu0s_BFu31i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu31i_BFu1i) C1{ Fs:0 Fi:31 Fi:1}



static void Test_BFu0s_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0s_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu1i, BFu0s_BFu31i_BFu1i)
//============================================================================


struct  BFu0s_BFu31i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu31i_BFu1ll) C1{ Fs:0 Fi:31 FL:1}



static void Test_BFu0s_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0s_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu1ll, BFu0s_BFu31i_BFu1ll)
//============================================================================


struct  BFu0s_BFu31i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu31i_BFu1s) C1{ Fs:0 Fi:31 Fs:1}



static void Test_BFu0s_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu31i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0s_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu1s, BFu0s_BFu31i_BFu1s)
//============================================================================


struct  BFu0s_BFu31i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu31i_BFu31i) C1{ Fs:0 Fi:31 Fi:31}



static void Test_BFu0s_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu31i, BFu0s_BFu31i_BFu31i)
//============================================================================


struct  BFu0s_BFu31i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu31i_BFu31ll) C1{ Fs:0 Fi:31 FL:31}



static void Test_BFu0s_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu0s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu31ll, BFu0s_BFu31i_BFu31ll)
//============================================================================


struct  BFu0s_BFu31i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu31i_BFu32i) C1{ Fs:0 Fi:31 Fi:32}



static void Test_BFu0s_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu32i, BFu0s_BFu31i_BFu32i)
//============================================================================


struct  BFu0s_BFu31i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu31i_BFu32ll) C1{ Fs:0 Fi:31 FL:32}



static void Test_BFu0s_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu0s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu32ll, BFu0s_BFu31i_BFu32ll)
//============================================================================


struct  BFu0s_BFu31i_BFu33  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu31i_BFu33) C1{ Fs:0 Fi:31 FL:33}



static void Test_BFu0s_BFu31i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu33");
    static STRUCT_IF_C BFu0s_BFu31i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu0s_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu33, BFu0s_BFu31i_BFu33)
//============================================================================


struct  BFu0s_BFu31i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu31i_BFu7c) C1{ Fs:0 Fi:31 Fc:7}



static void Test_BFu0s_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu31i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu7c, BFu0s_BFu31i_BFu7c)
//============================================================================


struct  BFu0s_BFu31i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu31i_BFu7i) C1{ Fs:0 Fi:31 Fi:7}



static void Test_BFu0s_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu7i, BFu0s_BFu31i_BFu7i)
//============================================================================


struct  BFu0s_BFu31i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu31i_BFu7ll) C1{ Fs:0 Fi:31 FL:7}



static void Test_BFu0s_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu0s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu7ll, BFu0s_BFu31i_BFu7ll)
//============================================================================


struct  BFu0s_BFu31i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu31i_BFu7s) C1{ Fs:0 Fi:31 Fs:7}



static void Test_BFu0s_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu31i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu7s, BFu0s_BFu31i_BFu7s)
//============================================================================


struct  BFu0s_BFu31i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu31i_BFu8c) C1{ Fs:0 Fi:31 Fc:8}



static void Test_BFu0s_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu31i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu8c, BFu0s_BFu31i_BFu8c)
//============================================================================


struct  BFu0s_BFu31i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu31i_BFu8i) C1{ Fs:0 Fi:31 Fi:8}



static void Test_BFu0s_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu8i, BFu0s_BFu31i_BFu8i)
//============================================================================


struct  BFu0s_BFu31i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu31i_BFu8ll) C1{ Fs:0 Fi:31 FL:8}



static void Test_BFu0s_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu0s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu8ll, BFu0s_BFu31i_BFu8ll)
//============================================================================


struct  BFu0s_BFu31i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu31i_BFu8s) C1{ Fs:0 Fi:31 Fs:8}



static void Test_BFu0s_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu31i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu8s, BFu0s_BFu31i_BFu8s)
//============================================================================


struct  BFu0s_BFu31i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu31i_BFu9i) C1{ Fs:0 Fi:31 Fi:9}



static void Test_BFu0s_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu31i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu9i, BFu0s_BFu31i_BFu9i)
//============================================================================


struct  BFu0s_BFu31i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu31i_BFu9ll) C1{ Fs:0 Fi:31 FL:9}



static void Test_BFu0s_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu31i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu0s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu9ll, BFu0s_BFu31i_BFu9ll)
//============================================================================


struct  BFu0s_BFu31i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu31i_BFu9s) C1{ Fs:0 Fi:31 Fs:9}



static void Test_BFu0s_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu31i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu31i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_BFu9s, BFu0s_BFu31i_BFu9s)
//============================================================================


struct  BFu0s_BFu31i_C  {
  unsigned short  :0;
  unsigned int v1:31;
  char v2;
};
//SIG(1 BFu0s_BFu31i_C) C1{ Fs:0 Fi:31 Fc}



static void Test_BFu0s_BFu31i_C()
{
  {
    init_simple_test("BFu0s_BFu31i_C");
    static STRUCT_IF_C BFu0s_BFu31i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_C");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_C, BFu0s_BFu31i_C)
//============================================================================


struct  BFu0s_BFu31i_D  {
  unsigned short  :0;
  unsigned int v1:31;
  double v2;
};
//SIG(1 BFu0s_BFu31i_D) C1{ Fs:0 Fi:31 FL}



static void Test_BFu0s_BFu31i_D()
{
  {
    init_simple_test("BFu0s_BFu31i_D");
    static STRUCT_IF_C BFu0s_BFu31i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_D, BFu0s_BFu31i_D)
//============================================================================


struct  BFu0s_BFu31i_F  {
  unsigned short  :0;
  unsigned int v1:31;
  float v2;
};
//SIG(1 BFu0s_BFu31i_F) C1{ Fs:0 Fi:31 Fi}



static void Test_BFu0s_BFu31i_F()
{
  {
    init_simple_test("BFu0s_BFu31i_F");
    static STRUCT_IF_C BFu0s_BFu31i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_F, BFu0s_BFu31i_F)
//============================================================================


struct  BFu0s_BFu31i_I  {
  unsigned short  :0;
  unsigned int v1:31;
  int v2;
};
//SIG(1 BFu0s_BFu31i_I) C1{ Fs:0 Fi:31 Fi}



static void Test_BFu0s_BFu31i_I()
{
  {
    init_simple_test("BFu0s_BFu31i_I");
    static STRUCT_IF_C BFu0s_BFu31i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_I, BFu0s_BFu31i_I)
//============================================================================


struct  BFu0s_BFu31i_Ip  {
  unsigned short  :0;
  unsigned int v1:31;
  int *v2;
};
//SIG(1 BFu0s_BFu31i_Ip) C1{ Fs:0 Fi:31 Fp}



static void Test_BFu0s_BFu31i_Ip()
{
  {
    init_simple_test("BFu0s_BFu31i_Ip");
    static STRUCT_IF_C BFu0s_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_Ip, BFu0s_BFu31i_Ip)
//============================================================================


struct  BFu0s_BFu31i_L  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu31i_L) C1{ Fs:0 Fi:31 FL}



static void Test_BFu0s_BFu31i_L()
{
  {
    init_simple_test("BFu0s_BFu31i_L");
    static STRUCT_IF_C BFu0s_BFu31i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_L, BFu0s_BFu31i_L)
//============================================================================


struct  BFu0s_BFu31i_S  {
  unsigned short  :0;
  unsigned int v1:31;
  short v2;
};
//SIG(1 BFu0s_BFu31i_S) C1{ Fs:0 Fi:31 Fs}



static void Test_BFu0s_BFu31i_S()
{
  {
    init_simple_test("BFu0s_BFu31i_S");
    static STRUCT_IF_C BFu0s_BFu31i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_S");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_S, BFu0s_BFu31i_S)
//============================================================================


struct  BFu0s_BFu31i_Uc  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu31i_Uc) C1{ Fs:0 Fi:31 Fc}



static void Test_BFu0s_BFu31i_Uc()
{
  {
    init_simple_test("BFu0s_BFu31i_Uc");
    static STRUCT_IF_C BFu0s_BFu31i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_Uc");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_Uc, BFu0s_BFu31i_Uc)
//============================================================================


struct  BFu0s_BFu31i_Ui  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu31i_Ui) C1{ Fs:0 Fi:31 Fi}



static void Test_BFu0s_BFu31i_Ui()
{
  {
    init_simple_test("BFu0s_BFu31i_Ui");
    static STRUCT_IF_C BFu0s_BFu31i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_Ui, BFu0s_BFu31i_Ui)
//============================================================================


struct  BFu0s_BFu31i_Ul  {
  unsigned short  :0;
  unsigned int v1:31;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu31i_Ul) C1{ Fs:0 Fi:31 FL}



static void Test_BFu0s_BFu31i_Ul()
{
  {
    init_simple_test("BFu0s_BFu31i_Ul");
    static STRUCT_IF_C BFu0s_BFu31i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_Ul, BFu0s_BFu31i_Ul)
//============================================================================


struct  BFu0s_BFu31i_Us  {
  unsigned short  :0;
  unsigned int v1:31;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu31i_Us) C1{ Fs:0 Fi:31 Fs}



static void Test_BFu0s_BFu31i_Us()
{
  {
    init_simple_test("BFu0s_BFu31i_Us");
    static STRUCT_IF_C BFu0s_BFu31i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_Us");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_Us, BFu0s_BFu31i_Us)
//============================================================================


struct  BFu0s_BFu31i_Vp  {
  unsigned short  :0;
  unsigned int v1:31;
  void *v2;
};
//SIG(1 BFu0s_BFu31i_Vp) C1{ Fs:0 Fi:31 Fp}



static void Test_BFu0s_BFu31i_Vp()
{
  {
    init_simple_test("BFu0s_BFu31i_Vp");
    static STRUCT_IF_C BFu0s_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31i_Vp, BFu0s_BFu31i_Vp)
//============================================================================


struct  BFu0s_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:31;
};
//SIG(1 BFu0s_BFu31ll) C1{ Fs:0 FL:31}



static void Test_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll, BFu0s_BFu31ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu31ll_BFu0c) C1{ Fs:0 FL:31 Fc:0}



static void Test_BFu0s_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu0c, BFu0s_BFu31ll_BFu0c)
//============================================================================


struct  BFu0s_BFu31ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu31ll_BFu0i) C1{ Fs:0 FL:31 Fi:0}



static void Test_BFu0s_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu0i, BFu0s_BFu31ll_BFu0i)
//============================================================================


struct  BFu0s_BFu31ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu31ll_BFu0ll) C1{ Fs:0 FL:31 FL:0}



static void Test_BFu0s_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu0ll, BFu0s_BFu31ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu31ll_BFu0s) C1{ Fs:0 FL:31 Fs:0}



static void Test_BFu0s_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu0s, BFu0s_BFu31ll_BFu0s)
//============================================================================


struct  BFu0s_BFu31ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu31ll_BFu15i) C1{ Fs:0 FL:31 Fi:15}



static void Test_BFu0s_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu15i, BFu0s_BFu31ll_BFu15i)
//============================================================================


struct  BFu0s_BFu31ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu31ll_BFu15ll) C1{ Fs:0 FL:31 FL:15}



static void Test_BFu0s_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu0s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu15ll, BFu0s_BFu31ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu31ll_BFu15s) C1{ Fs:0 FL:31 Fs:15}



static void Test_BFu0s_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu15s, BFu0s_BFu31ll_BFu15s)
//============================================================================


struct  BFu0s_BFu31ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu31ll_BFu16i) C1{ Fs:0 FL:31 Fi:16}



static void Test_BFu0s_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu16i, BFu0s_BFu31ll_BFu16i)
//============================================================================


struct  BFu0s_BFu31ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu31ll_BFu16ll) C1{ Fs:0 FL:31 FL:16}



static void Test_BFu0s_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu0s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu16ll, BFu0s_BFu31ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu31ll_BFu16s) C1{ Fs:0 FL:31 Fs:16}



static void Test_BFu0s_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu16s, BFu0s_BFu31ll_BFu16s)
//============================================================================


struct  BFu0s_BFu31ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu31ll_BFu17i) C1{ Fs:0 FL:31 Fi:17}



static void Test_BFu0s_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu17i, BFu0s_BFu31ll_BFu17i)
//============================================================================


struct  BFu0s_BFu31ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu31ll_BFu17ll) C1{ Fs:0 FL:31 FL:17}



static void Test_BFu0s_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu0s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu17ll, BFu0s_BFu31ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu31ll_BFu1c) C1{ Fs:0 FL:31 Fc:1}



static void Test_BFu0s_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0s_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu1c, BFu0s_BFu31ll_BFu1c)
//============================================================================


struct  BFu0s_BFu31ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu31ll_BFu1i) C1{ Fs:0 FL:31 Fi:1}



static void Test_BFu0s_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0s_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu1i, BFu0s_BFu31ll_BFu1i)
//============================================================================


struct  BFu0s_BFu31ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu31ll_BFu1ll) C1{ Fs:0 FL:31 FL:1}



static void Test_BFu0s_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0s_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu1ll, BFu0s_BFu31ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu31ll_BFu1s) C1{ Fs:0 FL:31 Fs:1}



static void Test_BFu0s_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu0s_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu1s, BFu0s_BFu31ll_BFu1s)
//============================================================================


struct  BFu0s_BFu31ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu31ll_BFu31i) C1{ Fs:0 FL:31 Fi:31}



static void Test_BFu0s_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu31i, BFu0s_BFu31ll_BFu31i)
//============================================================================


struct  BFu0s_BFu31ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu31ll_BFu31ll) C1{ Fs:0 FL:31 FL:31}



static void Test_BFu0s_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu0s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu31ll, BFu0s_BFu31ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu31ll_BFu32i) C1{ Fs:0 FL:31 Fi:32}



static void Test_BFu0s_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu32i, BFu0s_BFu31ll_BFu32i)
//============================================================================


struct  BFu0s_BFu31ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu31ll_BFu32ll) C1{ Fs:0 FL:31 FL:32}



static void Test_BFu0s_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu0s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu32ll, BFu0s_BFu31ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu31ll_BFu33) C1{ Fs:0 FL:31 FL:33}



static void Test_BFu0s_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu0s_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu33, BFu0s_BFu31ll_BFu33)
//============================================================================


struct  BFu0s_BFu31ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu31ll_BFu7c) C1{ Fs:0 FL:31 Fc:7}



static void Test_BFu0s_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu7c, BFu0s_BFu31ll_BFu7c)
//============================================================================


struct  BFu0s_BFu31ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu31ll_BFu7i) C1{ Fs:0 FL:31 Fi:7}



static void Test_BFu0s_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu7i, BFu0s_BFu31ll_BFu7i)
//============================================================================


struct  BFu0s_BFu31ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu31ll_BFu7ll) C1{ Fs:0 FL:31 FL:7}



static void Test_BFu0s_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu0s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu7ll, BFu0s_BFu31ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu31ll_BFu7s) C1{ Fs:0 FL:31 Fs:7}



static void Test_BFu0s_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu7s, BFu0s_BFu31ll_BFu7s)
//============================================================================


struct  BFu0s_BFu31ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu31ll_BFu8c) C1{ Fs:0 FL:31 Fc:8}



static void Test_BFu0s_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu8c, BFu0s_BFu31ll_BFu8c)
//============================================================================


struct  BFu0s_BFu31ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu31ll_BFu8i) C1{ Fs:0 FL:31 Fi:8}



static void Test_BFu0s_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu8i, BFu0s_BFu31ll_BFu8i)
//============================================================================


struct  BFu0s_BFu31ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu31ll_BFu8ll) C1{ Fs:0 FL:31 FL:8}



static void Test_BFu0s_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu0s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu8ll, BFu0s_BFu31ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu31ll_BFu8s) C1{ Fs:0 FL:31 Fs:8}



static void Test_BFu0s_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu8s, BFu0s_BFu31ll_BFu8s)
//============================================================================


struct  BFu0s_BFu31ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu31ll_BFu9i) C1{ Fs:0 FL:31 Fi:9}



static void Test_BFu0s_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu9i, BFu0s_BFu31ll_BFu9i)
//============================================================================


struct  BFu0s_BFu31ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu31ll_BFu9ll) C1{ Fs:0 FL:31 FL:9}



static void Test_BFu0s_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu0s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu9ll, BFu0s_BFu31ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu31ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu31ll_BFu9s) C1{ Fs:0 FL:31 Fs:9}



static void Test_BFu0s_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_BFu9s, BFu0s_BFu31ll_BFu9s)
//============================================================================


struct  BFu0s_BFu31ll_C  {
  unsigned short  :0;
  __tsu64 v1:31;
  char v2;
};
//SIG(1 BFu0s_BFu31ll_C) C1{ Fs:0 FL:31 Fc}



static void Test_BFu0s_BFu31ll_C()
{
  {
    init_simple_test("BFu0s_BFu31ll_C");
    static STRUCT_IF_C BFu0s_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_C");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_C, BFu0s_BFu31ll_C)
//============================================================================


struct  BFu0s_BFu31ll_D  {
  unsigned short  :0;
  __tsu64 v1:31;
  double v2;
};
//SIG(1 BFu0s_BFu31ll_D) C1{ Fs:0 FL:31 FL}



static void Test_BFu0s_BFu31ll_D()
{
  {
    init_simple_test("BFu0s_BFu31ll_D");
    static STRUCT_IF_C BFu0s_BFu31ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_D, BFu0s_BFu31ll_D)
//============================================================================


struct  BFu0s_BFu31ll_F  {
  unsigned short  :0;
  __tsu64 v1:31;
  float v2;
};
//SIG(1 BFu0s_BFu31ll_F) C1{ Fs:0 FL:31 Fi}



static void Test_BFu0s_BFu31ll_F()
{
  {
    init_simple_test("BFu0s_BFu31ll_F");
    static STRUCT_IF_C BFu0s_BFu31ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_F, BFu0s_BFu31ll_F)
//============================================================================


struct  BFu0s_BFu31ll_I  {
  unsigned short  :0;
  __tsu64 v1:31;
  int v2;
};
//SIG(1 BFu0s_BFu31ll_I) C1{ Fs:0 FL:31 Fi}



static void Test_BFu0s_BFu31ll_I()
{
  {
    init_simple_test("BFu0s_BFu31ll_I");
    static STRUCT_IF_C BFu0s_BFu31ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_I, BFu0s_BFu31ll_I)
//============================================================================


struct  BFu0s_BFu31ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:31;
  int *v2;
};
//SIG(1 BFu0s_BFu31ll_Ip) C1{ Fs:0 FL:31 Fp}



static void Test_BFu0s_BFu31ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu31ll_Ip");
    static STRUCT_IF_C BFu0s_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_Ip, BFu0s_BFu31ll_Ip)
//============================================================================


struct  BFu0s_BFu31ll_L  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu31ll_L) C1{ Fs:0 FL:31 FL}



static void Test_BFu0s_BFu31ll_L()
{
  {
    init_simple_test("BFu0s_BFu31ll_L");
    static STRUCT_IF_C BFu0s_BFu31ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_L, BFu0s_BFu31ll_L)
//============================================================================


struct  BFu0s_BFu31ll_S  {
  unsigned short  :0;
  __tsu64 v1:31;
  short v2;
};
//SIG(1 BFu0s_BFu31ll_S) C1{ Fs:0 FL:31 Fs}



static void Test_BFu0s_BFu31ll_S()
{
  {
    init_simple_test("BFu0s_BFu31ll_S");
    static STRUCT_IF_C BFu0s_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_S");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_S, BFu0s_BFu31ll_S)
//============================================================================


struct  BFu0s_BFu31ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu31ll_Uc) C1{ Fs:0 FL:31 Fc}



static void Test_BFu0s_BFu31ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu31ll_Uc");
    static STRUCT_IF_C BFu0s_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_Uc");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_Uc, BFu0s_BFu31ll_Uc)
//============================================================================


struct  BFu0s_BFu31ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu31ll_Ui) C1{ Fs:0 FL:31 Fi}



static void Test_BFu0s_BFu31ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu31ll_Ui");
    static STRUCT_IF_C BFu0s_BFu31ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_Ui, BFu0s_BFu31ll_Ui)
//============================================================================


struct  BFu0s_BFu31ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:31;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu31ll_Ul) C1{ Fs:0 FL:31 FL}



static void Test_BFu0s_BFu31ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu31ll_Ul");
    static STRUCT_IF_C BFu0s_BFu31ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_Ul, BFu0s_BFu31ll_Ul)
//============================================================================


struct  BFu0s_BFu31ll_Us  {
  unsigned short  :0;
  __tsu64 v1:31;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu31ll_Us) C1{ Fs:0 FL:31 Fs}



static void Test_BFu0s_BFu31ll_Us()
{
  {
    init_simple_test("BFu0s_BFu31ll_Us");
    static STRUCT_IF_C BFu0s_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_Us");
    check_field_offset(lv, v2, 4, "BFu0s_BFu31ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_Us, BFu0s_BFu31ll_Us)
//============================================================================


struct  BFu0s_BFu31ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:31;
  void *v2;
};
//SIG(1 BFu0s_BFu31ll_Vp) C1{ Fs:0 FL:31 Fp}



static void Test_BFu0s_BFu31ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu31ll_Vp");
    static STRUCT_IF_C BFu0s_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu0s_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu31ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu31ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu31ll_Vp, BFu0s_BFu31ll_Vp)
//============================================================================


struct  BFu0s_BFu32i  {
  unsigned short  :0;
  unsigned int v1:32;
};
//SIG(1 BFu0s_BFu32i) C1{ Fs:0 Fi:32}



static void Test_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu32i");
    static STRUCT_IF_C BFu0s_BFu32i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i, BFu0s_BFu32i)
//============================================================================


struct  BFu0s_BFu32i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu32i_BFu0c) C1{ Fs:0 Fi:32 Fc:0}



static void Test_BFu0s_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu32i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu0c, BFu0s_BFu32i_BFu0c)
//============================================================================


struct  BFu0s_BFu32i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu32i_BFu0i) C1{ Fs:0 Fi:32 Fi:0}



static void Test_BFu0s_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu0i, BFu0s_BFu32i_BFu0i)
//============================================================================


struct  BFu0s_BFu32i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu32i_BFu0ll) C1{ Fs:0 Fi:32 FL:0}



static void Test_BFu0s_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu0ll, BFu0s_BFu32i_BFu0ll)
//============================================================================


struct  BFu0s_BFu32i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu32i_BFu0s) C1{ Fs:0 Fi:32 Fs:0}



static void Test_BFu0s_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu32i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu0s, BFu0s_BFu32i_BFu0s)
//============================================================================


struct  BFu0s_BFu32i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu32i_BFu15i) C1{ Fs:0 Fi:32 Fi:15}



static void Test_BFu0s_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu15i, BFu0s_BFu32i_BFu15i)
//============================================================================


struct  BFu0s_BFu32i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu32i_BFu15ll) C1{ Fs:0 Fi:32 FL:15}



static void Test_BFu0s_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu15ll, BFu0s_BFu32i_BFu15ll)
//============================================================================


struct  BFu0s_BFu32i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu32i_BFu15s) C1{ Fs:0 Fi:32 Fs:15}



static void Test_BFu0s_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu32i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu15s, BFu0s_BFu32i_BFu15s)
//============================================================================


struct  BFu0s_BFu32i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu32i_BFu16i) C1{ Fs:0 Fi:32 Fi:16}



static void Test_BFu0s_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu16i, BFu0s_BFu32i_BFu16i)
//============================================================================


struct  BFu0s_BFu32i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu32i_BFu16ll) C1{ Fs:0 Fi:32 FL:16}



static void Test_BFu0s_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu16ll, BFu0s_BFu32i_BFu16ll)
//============================================================================


struct  BFu0s_BFu32i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu32i_BFu16s) C1{ Fs:0 Fi:32 Fs:16}



static void Test_BFu0s_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu32i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu16s, BFu0s_BFu32i_BFu16s)
//============================================================================


struct  BFu0s_BFu32i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu32i_BFu17i) C1{ Fs:0 Fi:32 Fi:17}



static void Test_BFu0s_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu17i, BFu0s_BFu32i_BFu17i)
//============================================================================


struct  BFu0s_BFu32i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu32i_BFu17ll) C1{ Fs:0 Fi:32 FL:17}



static void Test_BFu0s_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu17ll, BFu0s_BFu32i_BFu17ll)
//============================================================================


struct  BFu0s_BFu32i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu32i_BFu1c) C1{ Fs:0 Fi:32 Fc:1}



static void Test_BFu0s_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu32i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0s_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu1c, BFu0s_BFu32i_BFu1c)
//============================================================================


struct  BFu0s_BFu32i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu32i_BFu1i) C1{ Fs:0 Fi:32 Fi:1}



static void Test_BFu0s_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0s_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu1i, BFu0s_BFu32i_BFu1i)
//============================================================================


struct  BFu0s_BFu32i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu32i_BFu1ll) C1{ Fs:0 Fi:32 FL:1}



static void Test_BFu0s_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0s_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu1ll, BFu0s_BFu32i_BFu1ll)
//============================================================================


struct  BFu0s_BFu32i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu32i_BFu1s) C1{ Fs:0 Fi:32 Fs:1}



static void Test_BFu0s_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu32i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0s_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu1s, BFu0s_BFu32i_BFu1s)
//============================================================================


struct  BFu0s_BFu32i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu32i_BFu31i) C1{ Fs:0 Fi:32 Fi:31}



static void Test_BFu0s_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu31i, BFu0s_BFu32i_BFu31i)
//============================================================================


struct  BFu0s_BFu32i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu32i_BFu31ll) C1{ Fs:0 Fi:32 FL:31}



static void Test_BFu0s_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu31ll, BFu0s_BFu32i_BFu31ll)
//============================================================================


struct  BFu0s_BFu32i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu32i_BFu32i) C1{ Fs:0 Fi:32 Fi:32}



static void Test_BFu0s_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu32i, BFu0s_BFu32i_BFu32i)
//============================================================================


struct  BFu0s_BFu32i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu32i_BFu32ll) C1{ Fs:0 Fi:32 FL:32}



static void Test_BFu0s_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu32ll, BFu0s_BFu32i_BFu32ll)
//============================================================================


struct  BFu0s_BFu32i_BFu33  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu32i_BFu33) C1{ Fs:0 Fi:32 FL:33}



static void Test_BFu0s_BFu32i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu33");
    static STRUCT_IF_C BFu0s_BFu32i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0s_BFu32i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0s_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu33, BFu0s_BFu32i_BFu33)
//============================================================================


struct  BFu0s_BFu32i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu32i_BFu7c) C1{ Fs:0 Fi:32 Fc:7}



static void Test_BFu0s_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu32i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu7c, BFu0s_BFu32i_BFu7c)
//============================================================================


struct  BFu0s_BFu32i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu32i_BFu7i) C1{ Fs:0 Fi:32 Fi:7}



static void Test_BFu0s_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu7i, BFu0s_BFu32i_BFu7i)
//============================================================================


struct  BFu0s_BFu32i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu32i_BFu7ll) C1{ Fs:0 Fi:32 FL:7}



static void Test_BFu0s_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu7ll, BFu0s_BFu32i_BFu7ll)
//============================================================================


struct  BFu0s_BFu32i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu32i_BFu7s) C1{ Fs:0 Fi:32 Fs:7}



static void Test_BFu0s_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu32i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu7s, BFu0s_BFu32i_BFu7s)
//============================================================================


struct  BFu0s_BFu32i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu32i_BFu8c) C1{ Fs:0 Fi:32 Fc:8}



static void Test_BFu0s_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu32i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu8c, BFu0s_BFu32i_BFu8c)
//============================================================================


struct  BFu0s_BFu32i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu32i_BFu8i) C1{ Fs:0 Fi:32 Fi:8}



static void Test_BFu0s_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu8i, BFu0s_BFu32i_BFu8i)
//============================================================================


struct  BFu0s_BFu32i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu32i_BFu8ll) C1{ Fs:0 Fi:32 FL:8}



static void Test_BFu0s_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu8ll, BFu0s_BFu32i_BFu8ll)
//============================================================================


struct  BFu0s_BFu32i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu32i_BFu8s) C1{ Fs:0 Fi:32 Fs:8}



static void Test_BFu0s_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu32i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu8s, BFu0s_BFu32i_BFu8s)
//============================================================================


struct  BFu0s_BFu32i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu32i_BFu9i) C1{ Fs:0 Fi:32 Fi:9}



static void Test_BFu0s_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu32i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu9i, BFu0s_BFu32i_BFu9i)
//============================================================================


struct  BFu0s_BFu32i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu32i_BFu9ll) C1{ Fs:0 Fi:32 FL:9}



static void Test_BFu0s_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu32i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu9ll, BFu0s_BFu32i_BFu9ll)
//============================================================================


struct  BFu0s_BFu32i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu32i_BFu9s) C1{ Fs:0 Fi:32 Fs:9}



static void Test_BFu0s_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu32i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu32i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_BFu9s, BFu0s_BFu32i_BFu9s)
//============================================================================


struct  BFu0s_BFu32i_C  {
  unsigned short  :0;
  unsigned int v1:32;
  char v2;
};
//SIG(1 BFu0s_BFu32i_C) C1{ Fs:0 Fi:32 Fc}



static void Test_BFu0s_BFu32i_C()
{
  {
    init_simple_test("BFu0s_BFu32i_C");
    static STRUCT_IF_C BFu0s_BFu32i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_C");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_C, BFu0s_BFu32i_C)
//============================================================================


struct  BFu0s_BFu32i_D  {
  unsigned short  :0;
  unsigned int v1:32;
  double v2;
};
//SIG(1 BFu0s_BFu32i_D) C1{ Fs:0 Fi:32 FL}



static void Test_BFu0s_BFu32i_D()
{
  {
    init_simple_test("BFu0s_BFu32i_D");
    static STRUCT_IF_C BFu0s_BFu32i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_D, BFu0s_BFu32i_D)
//============================================================================


struct  BFu0s_BFu32i_F  {
  unsigned short  :0;
  unsigned int v1:32;
  float v2;
};
//SIG(1 BFu0s_BFu32i_F) C1{ Fs:0 Fi:32 Fi}



static void Test_BFu0s_BFu32i_F()
{
  {
    init_simple_test("BFu0s_BFu32i_F");
    static STRUCT_IF_C BFu0s_BFu32i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_F, BFu0s_BFu32i_F)
//============================================================================


struct  BFu0s_BFu32i_I  {
  unsigned short  :0;
  unsigned int v1:32;
  int v2;
};
//SIG(1 BFu0s_BFu32i_I) C1{ Fs:0 Fi:32 Fi}



static void Test_BFu0s_BFu32i_I()
{
  {
    init_simple_test("BFu0s_BFu32i_I");
    static STRUCT_IF_C BFu0s_BFu32i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_I, BFu0s_BFu32i_I)
//============================================================================


struct  BFu0s_BFu32i_Ip  {
  unsigned short  :0;
  unsigned int v1:32;
  int *v2;
};
//SIG(1 BFu0s_BFu32i_Ip) C1{ Fs:0 Fi:32 Fp}



static void Test_BFu0s_BFu32i_Ip()
{
  {
    init_simple_test("BFu0s_BFu32i_Ip");
    static STRUCT_IF_C BFu0s_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_Ip, BFu0s_BFu32i_Ip)
//============================================================================


struct  BFu0s_BFu32i_L  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu32i_L) C1{ Fs:0 Fi:32 FL}



static void Test_BFu0s_BFu32i_L()
{
  {
    init_simple_test("BFu0s_BFu32i_L");
    static STRUCT_IF_C BFu0s_BFu32i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_L, BFu0s_BFu32i_L)
//============================================================================


struct  BFu0s_BFu32i_S  {
  unsigned short  :0;
  unsigned int v1:32;
  short v2;
};
//SIG(1 BFu0s_BFu32i_S) C1{ Fs:0 Fi:32 Fs}



static void Test_BFu0s_BFu32i_S()
{
  {
    init_simple_test("BFu0s_BFu32i_S");
    static STRUCT_IF_C BFu0s_BFu32i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_S");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_S, BFu0s_BFu32i_S)
//============================================================================


struct  BFu0s_BFu32i_Uc  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu32i_Uc) C1{ Fs:0 Fi:32 Fc}



static void Test_BFu0s_BFu32i_Uc()
{
  {
    init_simple_test("BFu0s_BFu32i_Uc");
    static STRUCT_IF_C BFu0s_BFu32i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_Uc");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_Uc, BFu0s_BFu32i_Uc)
//============================================================================


struct  BFu0s_BFu32i_Ui  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu32i_Ui) C1{ Fs:0 Fi:32 Fi}



static void Test_BFu0s_BFu32i_Ui()
{
  {
    init_simple_test("BFu0s_BFu32i_Ui");
    static STRUCT_IF_C BFu0s_BFu32i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_Ui, BFu0s_BFu32i_Ui)
//============================================================================


struct  BFu0s_BFu32i_Ul  {
  unsigned short  :0;
  unsigned int v1:32;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu32i_Ul) C1{ Fs:0 Fi:32 FL}



static void Test_BFu0s_BFu32i_Ul()
{
  {
    init_simple_test("BFu0s_BFu32i_Ul");
    static STRUCT_IF_C BFu0s_BFu32i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_Ul, BFu0s_BFu32i_Ul)
//============================================================================


struct  BFu0s_BFu32i_Us  {
  unsigned short  :0;
  unsigned int v1:32;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu32i_Us) C1{ Fs:0 Fi:32 Fs}



static void Test_BFu0s_BFu32i_Us()
{
  {
    init_simple_test("BFu0s_BFu32i_Us");
    static STRUCT_IF_C BFu0s_BFu32i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_Us");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_Us, BFu0s_BFu32i_Us)
//============================================================================


struct  BFu0s_BFu32i_Vp  {
  unsigned short  :0;
  unsigned int v1:32;
  void *v2;
};
//SIG(1 BFu0s_BFu32i_Vp) C1{ Fs:0 Fi:32 Fp}



static void Test_BFu0s_BFu32i_Vp()
{
  {
    init_simple_test("BFu0s_BFu32i_Vp");
    static STRUCT_IF_C BFu0s_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32i_Vp, BFu0s_BFu32i_Vp)
//============================================================================


struct  BFu0s_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:32;
};
//SIG(1 BFu0s_BFu32ll) C1{ Fs:0 FL:32}



static void Test_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll, BFu0s_BFu32ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu32ll_BFu0c) C1{ Fs:0 FL:32 Fc:0}



static void Test_BFu0s_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu0c, BFu0s_BFu32ll_BFu0c)
//============================================================================


struct  BFu0s_BFu32ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu32ll_BFu0i) C1{ Fs:0 FL:32 Fi:0}



static void Test_BFu0s_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu0i, BFu0s_BFu32ll_BFu0i)
//============================================================================


struct  BFu0s_BFu32ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu32ll_BFu0ll) C1{ Fs:0 FL:32 FL:0}



static void Test_BFu0s_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu0ll, BFu0s_BFu32ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu32ll_BFu0s) C1{ Fs:0 FL:32 Fs:0}



static void Test_BFu0s_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu0s, BFu0s_BFu32ll_BFu0s)
//============================================================================


struct  BFu0s_BFu32ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu32ll_BFu15i) C1{ Fs:0 FL:32 Fi:15}



static void Test_BFu0s_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu15i, BFu0s_BFu32ll_BFu15i)
//============================================================================


struct  BFu0s_BFu32ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu32ll_BFu15ll) C1{ Fs:0 FL:32 FL:15}



static void Test_BFu0s_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu15ll, BFu0s_BFu32ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu32ll_BFu15s) C1{ Fs:0 FL:32 Fs:15}



static void Test_BFu0s_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu0s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu15s, BFu0s_BFu32ll_BFu15s)
//============================================================================


struct  BFu0s_BFu32ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu32ll_BFu16i) C1{ Fs:0 FL:32 Fi:16}



static void Test_BFu0s_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu16i, BFu0s_BFu32ll_BFu16i)
//============================================================================


struct  BFu0s_BFu32ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu32ll_BFu16ll) C1{ Fs:0 FL:32 FL:16}



static void Test_BFu0s_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu16ll, BFu0s_BFu32ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu32ll_BFu16s) C1{ Fs:0 FL:32 Fs:16}



static void Test_BFu0s_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu0s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu16s, BFu0s_BFu32ll_BFu16s)
//============================================================================


struct  BFu0s_BFu32ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu32ll_BFu17i) C1{ Fs:0 FL:32 Fi:17}



static void Test_BFu0s_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu17i, BFu0s_BFu32ll_BFu17i)
//============================================================================


struct  BFu0s_BFu32ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu32ll_BFu17ll) C1{ Fs:0 FL:32 FL:17}



static void Test_BFu0s_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu0s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu17ll, BFu0s_BFu32ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu32ll_BFu1c) C1{ Fs:0 FL:32 Fc:1}



static void Test_BFu0s_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0s_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu1c, BFu0s_BFu32ll_BFu1c)
//============================================================================


struct  BFu0s_BFu32ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu32ll_BFu1i) C1{ Fs:0 FL:32 Fi:1}



static void Test_BFu0s_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0s_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu1i, BFu0s_BFu32ll_BFu1i)
//============================================================================


struct  BFu0s_BFu32ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu32ll_BFu1ll) C1{ Fs:0 FL:32 FL:1}



static void Test_BFu0s_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0s_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu1ll, BFu0s_BFu32ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu32ll_BFu1s) C1{ Fs:0 FL:32 Fs:1}



static void Test_BFu0s_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu0s_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu1s, BFu0s_BFu32ll_BFu1s)
//============================================================================


struct  BFu0s_BFu32ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu32ll_BFu31i) C1{ Fs:0 FL:32 Fi:31}



static void Test_BFu0s_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu31i, BFu0s_BFu32ll_BFu31i)
//============================================================================


struct  BFu0s_BFu32ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu32ll_BFu31ll) C1{ Fs:0 FL:32 FL:31}



static void Test_BFu0s_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu31ll, BFu0s_BFu32ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu32ll_BFu32i) C1{ Fs:0 FL:32 Fi:32}



static void Test_BFu0s_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu32i, BFu0s_BFu32ll_BFu32i)
//============================================================================


struct  BFu0s_BFu32ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu32ll_BFu32ll) C1{ Fs:0 FL:32 FL:32}



static void Test_BFu0s_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu32ll, BFu0s_BFu32ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu32ll_BFu33) C1{ Fs:0 FL:32 FL:33}



static void Test_BFu0s_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu0s_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu0s_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu33, BFu0s_BFu32ll_BFu33)
//============================================================================


struct  BFu0s_BFu32ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu32ll_BFu7c) C1{ Fs:0 FL:32 Fc:7}



static void Test_BFu0s_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu7c, BFu0s_BFu32ll_BFu7c)
//============================================================================


struct  BFu0s_BFu32ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu32ll_BFu7i) C1{ Fs:0 FL:32 Fi:7}



static void Test_BFu0s_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu7i, BFu0s_BFu32ll_BFu7i)
//============================================================================


struct  BFu0s_BFu32ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu32ll_BFu7ll) C1{ Fs:0 FL:32 FL:7}



static void Test_BFu0s_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu7ll, BFu0s_BFu32ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu32ll_BFu7s) C1{ Fs:0 FL:32 Fs:7}



static void Test_BFu0s_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu0s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu7s, BFu0s_BFu32ll_BFu7s)
//============================================================================


struct  BFu0s_BFu32ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu32ll_BFu8c) C1{ Fs:0 FL:32 Fc:8}



static void Test_BFu0s_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu8c, BFu0s_BFu32ll_BFu8c)
//============================================================================


struct  BFu0s_BFu32ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu32ll_BFu8i) C1{ Fs:0 FL:32 Fi:8}



static void Test_BFu0s_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu8i, BFu0s_BFu32ll_BFu8i)
//============================================================================


struct  BFu0s_BFu32ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu32ll_BFu8ll) C1{ Fs:0 FL:32 FL:8}



static void Test_BFu0s_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu8ll, BFu0s_BFu32ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu32ll_BFu8s) C1{ Fs:0 FL:32 Fs:8}



static void Test_BFu0s_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu0s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu8s, BFu0s_BFu32ll_BFu8s)
//============================================================================


struct  BFu0s_BFu32ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu32ll_BFu9i) C1{ Fs:0 FL:32 Fi:9}



static void Test_BFu0s_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu9i, BFu0s_BFu32ll_BFu9i)
//============================================================================


struct  BFu0s_BFu32ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu32ll_BFu9ll) C1{ Fs:0 FL:32 FL:9}



static void Test_BFu0s_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu9ll, BFu0s_BFu32ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu32ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu32ll_BFu9s) C1{ Fs:0 FL:32 Fs:9}



static void Test_BFu0s_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu0s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_BFu9s, BFu0s_BFu32ll_BFu9s)
//============================================================================


struct  BFu0s_BFu32ll_C  {
  unsigned short  :0;
  __tsu64 v1:32;
  char v2;
};
//SIG(1 BFu0s_BFu32ll_C) C1{ Fs:0 FL:32 Fc}



static void Test_BFu0s_BFu32ll_C()
{
  {
    init_simple_test("BFu0s_BFu32ll_C");
    static STRUCT_IF_C BFu0s_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_C");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_C, BFu0s_BFu32ll_C)
//============================================================================


struct  BFu0s_BFu32ll_D  {
  unsigned short  :0;
  __tsu64 v1:32;
  double v2;
};
//SIG(1 BFu0s_BFu32ll_D) C1{ Fs:0 FL:32 FL}



static void Test_BFu0s_BFu32ll_D()
{
  {
    init_simple_test("BFu0s_BFu32ll_D");
    static STRUCT_IF_C BFu0s_BFu32ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_D, BFu0s_BFu32ll_D)
//============================================================================


struct  BFu0s_BFu32ll_F  {
  unsigned short  :0;
  __tsu64 v1:32;
  float v2;
};
//SIG(1 BFu0s_BFu32ll_F) C1{ Fs:0 FL:32 Fi}



static void Test_BFu0s_BFu32ll_F()
{
  {
    init_simple_test("BFu0s_BFu32ll_F");
    static STRUCT_IF_C BFu0s_BFu32ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_F, BFu0s_BFu32ll_F)
//============================================================================


struct  BFu0s_BFu32ll_I  {
  unsigned short  :0;
  __tsu64 v1:32;
  int v2;
};
//SIG(1 BFu0s_BFu32ll_I) C1{ Fs:0 FL:32 Fi}



static void Test_BFu0s_BFu32ll_I()
{
  {
    init_simple_test("BFu0s_BFu32ll_I");
    static STRUCT_IF_C BFu0s_BFu32ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_I, BFu0s_BFu32ll_I)
//============================================================================


struct  BFu0s_BFu32ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:32;
  int *v2;
};
//SIG(1 BFu0s_BFu32ll_Ip) C1{ Fs:0 FL:32 Fp}



static void Test_BFu0s_BFu32ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu32ll_Ip");
    static STRUCT_IF_C BFu0s_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_Ip, BFu0s_BFu32ll_Ip)
//============================================================================


struct  BFu0s_BFu32ll_L  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu32ll_L) C1{ Fs:0 FL:32 FL}



static void Test_BFu0s_BFu32ll_L()
{
  {
    init_simple_test("BFu0s_BFu32ll_L");
    static STRUCT_IF_C BFu0s_BFu32ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_L, BFu0s_BFu32ll_L)
//============================================================================


struct  BFu0s_BFu32ll_S  {
  unsigned short  :0;
  __tsu64 v1:32;
  short v2;
};
//SIG(1 BFu0s_BFu32ll_S) C1{ Fs:0 FL:32 Fs}



static void Test_BFu0s_BFu32ll_S()
{
  {
    init_simple_test("BFu0s_BFu32ll_S");
    static STRUCT_IF_C BFu0s_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_S");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_S, BFu0s_BFu32ll_S)
//============================================================================


struct  BFu0s_BFu32ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu32ll_Uc) C1{ Fs:0 FL:32 Fc}



static void Test_BFu0s_BFu32ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu32ll_Uc");
    static STRUCT_IF_C BFu0s_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_Uc");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_Uc, BFu0s_BFu32ll_Uc)
//============================================================================


struct  BFu0s_BFu32ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu32ll_Ui) C1{ Fs:0 FL:32 Fi}



static void Test_BFu0s_BFu32ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu32ll_Ui");
    static STRUCT_IF_C BFu0s_BFu32ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_Ui, BFu0s_BFu32ll_Ui)
//============================================================================


struct  BFu0s_BFu32ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:32;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu32ll_Ul) C1{ Fs:0 FL:32 FL}



static void Test_BFu0s_BFu32ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu32ll_Ul");
    static STRUCT_IF_C BFu0s_BFu32ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_Ul, BFu0s_BFu32ll_Ul)
//============================================================================


struct  BFu0s_BFu32ll_Us  {
  unsigned short  :0;
  __tsu64 v1:32;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu32ll_Us) C1{ Fs:0 FL:32 Fs}



static void Test_BFu0s_BFu32ll_Us()
{
  {
    init_simple_test("BFu0s_BFu32ll_Us");
    static STRUCT_IF_C BFu0s_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_Us");
    check_field_offset(lv, v2, 4, "BFu0s_BFu32ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_Us, BFu0s_BFu32ll_Us)
//============================================================================


struct  BFu0s_BFu32ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:32;
  void *v2;
};
//SIG(1 BFu0s_BFu32ll_Vp) C1{ Fs:0 FL:32 Fp}



static void Test_BFu0s_BFu32ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu32ll_Vp");
    static STRUCT_IF_C BFu0s_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu0s_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu32ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu32ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu32ll_Vp, BFu0s_BFu32ll_Vp)
//============================================================================


struct  BFu0s_BFu33  {
  unsigned short  :0;
  __tsu64 v1:33;
};
//SIG(1 BFu0s_BFu33) C1{ Fs:0 FL:33}



static void Test_BFu0s_BFu33()
{
  {
    init_simple_test("BFu0s_BFu33");
    static STRUCT_IF_C BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33, BFu0s_BFu33)
//============================================================================


struct  BFu0s_BFu33_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu33_BFu0c) C1{ Fs:0 FL:33 Fc:0}



static void Test_BFu0s_BFu33_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu33_BFu0c");
    static STRUCT_IF_C BFu0s_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu0c, BFu0s_BFu33_BFu0c)
//============================================================================


struct  BFu0s_BFu33_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu33_BFu0i) C1{ Fs:0 FL:33 Fi:0}



static void Test_BFu0s_BFu33_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu0i");
    static STRUCT_IF_C BFu0s_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu0i, BFu0s_BFu33_BFu0i)
//============================================================================


struct  BFu0s_BFu33_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu33_BFu0ll) C1{ Fs:0 FL:33 FL:0}



static void Test_BFu0s_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu0ll, BFu0s_BFu33_BFu0ll)
//============================================================================


struct  BFu0s_BFu33_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu33_BFu0s) C1{ Fs:0 FL:33 Fs:0}



static void Test_BFu0s_BFu33_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu33_BFu0s");
    static STRUCT_IF_C BFu0s_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu0s, BFu0s_BFu33_BFu0s)
//============================================================================


struct  BFu0s_BFu33_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu33_BFu15i) C1{ Fs:0 FL:33 Fi:15}



static void Test_BFu0s_BFu33_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu15i");
    static STRUCT_IF_C BFu0s_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu0s_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu15i, BFu0s_BFu33_BFu15i)
//============================================================================


struct  BFu0s_BFu33_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu33_BFu15ll) C1{ Fs:0 FL:33 FL:15}



static void Test_BFu0s_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu0s_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu15ll, BFu0s_BFu33_BFu15ll)
//============================================================================


struct  BFu0s_BFu33_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu33_BFu15s) C1{ Fs:0 FL:33 Fs:15}



static void Test_BFu0s_BFu33_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu33_BFu15s");
    static STRUCT_IF_C BFu0s_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu0s_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu15s, BFu0s_BFu33_BFu15s)
//============================================================================


struct  BFu0s_BFu33_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu33_BFu16i) C1{ Fs:0 FL:33 Fi:16}



static void Test_BFu0s_BFu33_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu16i");
    static STRUCT_IF_C BFu0s_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu0s_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu16i, BFu0s_BFu33_BFu16i)
//============================================================================


struct  BFu0s_BFu33_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu33_BFu16ll) C1{ Fs:0 FL:33 FL:16}



static void Test_BFu0s_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu0s_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu16ll, BFu0s_BFu33_BFu16ll)
//============================================================================


struct  BFu0s_BFu33_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu33_BFu16s) C1{ Fs:0 FL:33 Fs:16}



static void Test_BFu0s_BFu33_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu33_BFu16s");
    static STRUCT_IF_C BFu0s_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu0s_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu16s, BFu0s_BFu33_BFu16s)
//============================================================================


struct  BFu0s_BFu33_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu33_BFu17i) C1{ Fs:0 FL:33 Fi:17}



static void Test_BFu0s_BFu33_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu17i");
    static STRUCT_IF_C BFu0s_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu0s_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu17i, BFu0s_BFu33_BFu17i)
//============================================================================


struct  BFu0s_BFu33_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu33_BFu17ll) C1{ Fs:0 FL:33 FL:17}



static void Test_BFu0s_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu0s_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu17ll, BFu0s_BFu33_BFu17ll)
//============================================================================


struct  BFu0s_BFu33_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu33_BFu1c) C1{ Fs:0 FL:33 Fc:1}



static void Test_BFu0s_BFu33_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu33_BFu1c");
    static STRUCT_IF_C BFu0s_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu0s_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu1c, BFu0s_BFu33_BFu1c)
//============================================================================


struct  BFu0s_BFu33_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu33_BFu1i) C1{ Fs:0 FL:33 Fi:1}



static void Test_BFu0s_BFu33_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu1i");
    static STRUCT_IF_C BFu0s_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu0s_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu1i, BFu0s_BFu33_BFu1i)
//============================================================================


struct  BFu0s_BFu33_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu33_BFu1ll) C1{ Fs:0 FL:33 FL:1}



static void Test_BFu0s_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu0s_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu1ll, BFu0s_BFu33_BFu1ll)
//============================================================================


struct  BFu0s_BFu33_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu33_BFu1s) C1{ Fs:0 FL:33 Fs:1}



static void Test_BFu0s_BFu33_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu33_BFu1s");
    static STRUCT_IF_C BFu0s_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu0s_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu1s, BFu0s_BFu33_BFu1s)
//============================================================================


struct  BFu0s_BFu33_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu33_BFu31i) C1{ Fs:0 FL:33 Fi:31}



static void Test_BFu0s_BFu33_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu31i");
    static STRUCT_IF_C BFu0s_BFu33_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu0s_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu31i, BFu0s_BFu33_BFu31i)
//============================================================================


struct  BFu0s_BFu33_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu33_BFu31ll) C1{ Fs:0 FL:33 FL:31}



static void Test_BFu0s_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu0s_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu31ll, BFu0s_BFu33_BFu31ll)
//============================================================================


struct  BFu0s_BFu33_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu33_BFu32i) C1{ Fs:0 FL:33 Fi:32}



static void Test_BFu0s_BFu33_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu32i");
    static STRUCT_IF_C BFu0s_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu0s_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu32i, BFu0s_BFu33_BFu32i)
//============================================================================


struct  BFu0s_BFu33_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu33_BFu32ll) C1{ Fs:0 FL:33 FL:32}



static void Test_BFu0s_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu0s_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu0s_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu32ll, BFu0s_BFu33_BFu32ll)
//============================================================================


struct  BFu0s_BFu33_BFu33  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu33_BFu33) C1{ Fs:0 FL:33 FL:33}



static void Test_BFu0s_BFu33_BFu33()
{
  {
    init_simple_test("BFu0s_BFu33_BFu33");
    static STRUCT_IF_C BFu0s_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu0s_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu33, BFu0s_BFu33_BFu33)
//============================================================================


struct  BFu0s_BFu33_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu33_BFu7c) C1{ Fs:0 FL:33 Fc:7}



static void Test_BFu0s_BFu33_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu33_BFu7c");
    static STRUCT_IF_C BFu0s_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu0s_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu7c, BFu0s_BFu33_BFu7c)
//============================================================================


struct  BFu0s_BFu33_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu33_BFu7i) C1{ Fs:0 FL:33 Fi:7}



static void Test_BFu0s_BFu33_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu7i");
    static STRUCT_IF_C BFu0s_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu0s_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu7i, BFu0s_BFu33_BFu7i)
//============================================================================


struct  BFu0s_BFu33_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu33_BFu7ll) C1{ Fs:0 FL:33 FL:7}



static void Test_BFu0s_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu0s_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu7ll, BFu0s_BFu33_BFu7ll)
//============================================================================


struct  BFu0s_BFu33_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu33_BFu7s) C1{ Fs:0 FL:33 Fs:7}



static void Test_BFu0s_BFu33_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu33_BFu7s");
    static STRUCT_IF_C BFu0s_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu0s_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu7s, BFu0s_BFu33_BFu7s)
//============================================================================


struct  BFu0s_BFu33_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu33_BFu8c) C1{ Fs:0 FL:33 Fc:8}



static void Test_BFu0s_BFu33_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu33_BFu8c");
    static STRUCT_IF_C BFu0s_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 5, 0, 8, 1, "BFu0s_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 5, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu8c, BFu0s_BFu33_BFu8c)
//============================================================================


struct  BFu0s_BFu33_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu33_BFu8i) C1{ Fs:0 FL:33 Fi:8}



static void Test_BFu0s_BFu33_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu8i");
    static STRUCT_IF_C BFu0s_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu0s_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu8i, BFu0s_BFu33_BFu8i)
//============================================================================


struct  BFu0s_BFu33_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu33_BFu8ll) C1{ Fs:0 FL:33 FL:8}



static void Test_BFu0s_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu0s_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu8ll, BFu0s_BFu33_BFu8ll)
//============================================================================


struct  BFu0s_BFu33_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu33_BFu8s) C1{ Fs:0 FL:33 Fs:8}



static void Test_BFu0s_BFu33_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu33_BFu8s");
    static STRUCT_IF_C BFu0s_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu0s_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu8s, BFu0s_BFu33_BFu8s)
//============================================================================


struct  BFu0s_BFu33_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu33_BFu9i) C1{ Fs:0 FL:33 Fi:9}



static void Test_BFu0s_BFu33_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu33_BFu9i");
    static STRUCT_IF_C BFu0s_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu0s_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu9i, BFu0s_BFu33_BFu9i)
//============================================================================


struct  BFu0s_BFu33_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu33_BFu9ll) C1{ Fs:0 FL:33 FL:9}



static void Test_BFu0s_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu33_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu0s_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu9ll, BFu0s_BFu33_BFu9ll)
//============================================================================


struct  BFu0s_BFu33_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu33_BFu9s) C1{ Fs:0 FL:33 Fs:9}



static void Test_BFu0s_BFu33_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu33_BFu9s");
    static STRUCT_IF_C BFu0s_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu0s_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_BFu9s, BFu0s_BFu33_BFu9s)
//============================================================================


struct  BFu0s_BFu33_C  {
  unsigned short  :0;
  __tsu64 v1:33;
  char v2;
};
//SIG(1 BFu0s_BFu33_C) C1{ Fs:0 FL:33 Fc}



static void Test_BFu0s_BFu33_C()
{
  {
    init_simple_test("BFu0s_BFu33_C");
    static STRUCT_IF_C BFu0s_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_C");
    check_field_offset(lv, v2, 5, "BFu0s_BFu33_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_C, BFu0s_BFu33_C)
//============================================================================


struct  BFu0s_BFu33_D  {
  unsigned short  :0;
  __tsu64 v1:33;
  double v2;
};
//SIG(1 BFu0s_BFu33_D) C1{ Fs:0 FL:33 FL}



static void Test_BFu0s_BFu33_D()
{
  {
    init_simple_test("BFu0s_BFu33_D");
    static STRUCT_IF_C BFu0s_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu0s_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_D");
    check_field_offset(lv, v2, 8, "BFu0s_BFu33_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_D, BFu0s_BFu33_D)
//============================================================================


struct  BFu0s_BFu33_F  {
  unsigned short  :0;
  __tsu64 v1:33;
  float v2;
};
//SIG(1 BFu0s_BFu33_F) C1{ Fs:0 FL:33 Fi}



static void Test_BFu0s_BFu33_F()
{
  {
    init_simple_test("BFu0s_BFu33_F");
    static STRUCT_IF_C BFu0s_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_F");
    check_field_offset(lv, v2, 8, "BFu0s_BFu33_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_F, BFu0s_BFu33_F)
//============================================================================


struct  BFu0s_BFu33_I  {
  unsigned short  :0;
  __tsu64 v1:33;
  int v2;
};
//SIG(1 BFu0s_BFu33_I) C1{ Fs:0 FL:33 Fi}



static void Test_BFu0s_BFu33_I()
{
  {
    init_simple_test("BFu0s_BFu33_I");
    static STRUCT_IF_C BFu0s_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_I");
    check_field_offset(lv, v2, 8, "BFu0s_BFu33_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_I, BFu0s_BFu33_I)
//============================================================================


struct  BFu0s_BFu33_Ip  {
  unsigned short  :0;
  __tsu64 v1:33;
  int *v2;
};
//SIG(1 BFu0s_BFu33_Ip) C1{ Fs:0 FL:33 Fp}



static void Test_BFu0s_BFu33_Ip()
{
  {
    init_simple_test("BFu0s_BFu33_Ip");
    static STRUCT_IF_C BFu0s_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_Ip");
    check_field_offset(lv, v2, 8, "BFu0s_BFu33_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_Ip, BFu0s_BFu33_Ip)
//============================================================================


struct  BFu0s_BFu33_L  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu33_L) C1{ Fs:0 FL:33 FL}



static void Test_BFu0s_BFu33_L()
{
  {
    init_simple_test("BFu0s_BFu33_L");
    static STRUCT_IF_C BFu0s_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu0s_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_L");
    check_field_offset(lv, v2, 8, "BFu0s_BFu33_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_L, BFu0s_BFu33_L)
//============================================================================


struct  BFu0s_BFu33_S  {
  unsigned short  :0;
  __tsu64 v1:33;
  short v2;
};
//SIG(1 BFu0s_BFu33_S) C1{ Fs:0 FL:33 Fs}



static void Test_BFu0s_BFu33_S()
{
  {
    init_simple_test("BFu0s_BFu33_S");
    static STRUCT_IF_C BFu0s_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_S");
    check_field_offset(lv, v2, 6, "BFu0s_BFu33_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_S, BFu0s_BFu33_S)
//============================================================================


struct  BFu0s_BFu33_Uc  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu33_Uc) C1{ Fs:0 FL:33 Fc}



static void Test_BFu0s_BFu33_Uc()
{
  {
    init_simple_test("BFu0s_BFu33_Uc");
    static STRUCT_IF_C BFu0s_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_Uc");
    check_field_offset(lv, v2, 5, "BFu0s_BFu33_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_Uc, BFu0s_BFu33_Uc)
//============================================================================


struct  BFu0s_BFu33_Ui  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu33_Ui) C1{ Fs:0 FL:33 Fi}



static void Test_BFu0s_BFu33_Ui()
{
  {
    init_simple_test("BFu0s_BFu33_Ui");
    static STRUCT_IF_C BFu0s_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_Ui");
    check_field_offset(lv, v2, 8, "BFu0s_BFu33_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_Ui, BFu0s_BFu33_Ui)
//============================================================================


struct  BFu0s_BFu33_Ul  {
  unsigned short  :0;
  __tsu64 v1:33;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu33_Ul) C1{ Fs:0 FL:33 FL}



static void Test_BFu0s_BFu33_Ul()
{
  {
    init_simple_test("BFu0s_BFu33_Ul");
    static STRUCT_IF_C BFu0s_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu0s_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_Ul");
    check_field_offset(lv, v2, 8, "BFu0s_BFu33_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_Ul, BFu0s_BFu33_Ul)
//============================================================================


struct  BFu0s_BFu33_Us  {
  unsigned short  :0;
  __tsu64 v1:33;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu33_Us) C1{ Fs:0 FL:33 Fs}



static void Test_BFu0s_BFu33_Us()
{
  {
    init_simple_test("BFu0s_BFu33_Us");
    static STRUCT_IF_C BFu0s_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_Us");
    check_field_offset(lv, v2, 6, "BFu0s_BFu33_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_Us, BFu0s_BFu33_Us)
//============================================================================


struct  BFu0s_BFu33_Vp  {
  unsigned short  :0;
  __tsu64 v1:33;
  void *v2;
};
//SIG(1 BFu0s_BFu33_Vp) C1{ Fs:0 FL:33 Fp}



static void Test_BFu0s_BFu33_Vp()
{
  {
    init_simple_test("BFu0s_BFu33_Vp");
    static STRUCT_IF_C BFu0s_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu0s_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu33_Vp");
    check_field_offset(lv, v2, 8, "BFu0s_BFu33_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu33_Vp, BFu0s_BFu33_Vp)
//============================================================================


struct  BFu0s_BFu7c  {
  unsigned short  :0;
  unsigned char v1:7;
};
//SIG(1 BFu0s_BFu7c) C1{ Fs:0 Fc:7}



static void Test_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu7c");
    static STRUCT_IF_C BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c, BFu0s_BFu7c)
//============================================================================


struct  BFu0s_BFu7c_BFu0c  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu7c_BFu0c) C1{ Fs:0 Fc:7 Fc:0}



static void Test_BFu0s_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu0c, BFu0s_BFu7c_BFu0c)
//============================================================================


struct  BFu0s_BFu7c_BFu0i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu7c_BFu0i) C1{ Fs:0 Fc:7 Fi:0}



static void Test_BFu0s_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu0i, BFu0s_BFu7c_BFu0i)
//============================================================================


struct  BFu0s_BFu7c_BFu0ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu7c_BFu0ll) C1{ Fs:0 Fc:7 FL:0}



static void Test_BFu0s_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu0ll, BFu0s_BFu7c_BFu0ll)
//============================================================================


struct  BFu0s_BFu7c_BFu0s  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu7c_BFu0s) C1{ Fs:0 Fc:7 Fs:0}



static void Test_BFu0s_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu0s, BFu0s_BFu7c_BFu0s)
//============================================================================


struct  BFu0s_BFu7c_BFu15i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu7c_BFu15i) C1{ Fs:0 Fc:7 Fi:15}



static void Test_BFu0s_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu15i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0s_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu15i, BFu0s_BFu7c_BFu15i)
//============================================================================


struct  BFu0s_BFu7c_BFu15ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu7c_BFu15ll) C1{ Fs:0 Fc:7 FL:15}



static void Test_BFu0s_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu15ll, BFu0s_BFu7c_BFu15ll)
//============================================================================


struct  BFu0s_BFu7c_BFu15s  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu7c_BFu15s) C1{ Fs:0 Fc:7 Fs:15}



static void Test_BFu0s_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu15s");
    static STRUCT_IF_C BFu0s_BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu15s, BFu0s_BFu7c_BFu15s)
//============================================================================


struct  BFu0s_BFu7c_BFu16i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu7c_BFu16i) C1{ Fs:0 Fc:7 Fi:16}



static void Test_BFu0s_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu16i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0s_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu16i, BFu0s_BFu7c_BFu16i)
//============================================================================


struct  BFu0s_BFu7c_BFu16ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu7c_BFu16ll) C1{ Fs:0 Fc:7 FL:16}



static void Test_BFu0s_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu16ll, BFu0s_BFu7c_BFu16ll)
//============================================================================


struct  BFu0s_BFu7c_BFu16s  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu7c_BFu16s) C1{ Fs:0 Fc:7 Fs:16}



static void Test_BFu0s_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu16s");
    static STRUCT_IF_C BFu0s_BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu16s, BFu0s_BFu7c_BFu16s)
//============================================================================


struct  BFu0s_BFu7c_BFu17i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu7c_BFu17i) C1{ Fs:0 Fc:7 Fi:17}



static void Test_BFu0s_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu17i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0s_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu17i, BFu0s_BFu7c_BFu17i)
//============================================================================


struct  BFu0s_BFu7c_BFu17ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu7c_BFu17ll) C1{ Fs:0 Fc:7 FL:17}



static void Test_BFu0s_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu17ll, BFu0s_BFu7c_BFu17ll)
//============================================================================


struct  BFu0s_BFu7c_BFu1c  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu7c_BFu1c) C1{ Fs:0 Fc:7 Fc:1}



static void Test_BFu0s_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu1c");
    static STRUCT_IF_C BFu0s_BFu7c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu7c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu1c, BFu0s_BFu7c_BFu1c)
//============================================================================


struct  BFu0s_BFu7c_BFu1i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu7c_BFu1i) C1{ Fs:0 Fc:7 Fi:1}



static void Test_BFu0s_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu1i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu1i, BFu0s_BFu7c_BFu1i)
//============================================================================


struct  BFu0s_BFu7c_BFu1ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu7c_BFu1ll) C1{ Fs:0 Fc:7 FL:1}



static void Test_BFu0s_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu1ll, BFu0s_BFu7c_BFu1ll)
//============================================================================


struct  BFu0s_BFu7c_BFu1s  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu7c_BFu1s) C1{ Fs:0 Fc:7 Fs:1}



static void Test_BFu0s_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu1s");
    static STRUCT_IF_C BFu0s_BFu7c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu1s, BFu0s_BFu7c_BFu1s)
//============================================================================


struct  BFu0s_BFu7c_BFu31i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu7c_BFu31i) C1{ Fs:0 Fc:7 Fi:31}



static void Test_BFu0s_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu31i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu31i, BFu0s_BFu7c_BFu31i)
//============================================================================


struct  BFu0s_BFu7c_BFu31ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu7c_BFu31ll) C1{ Fs:0 Fc:7 FL:31}



static void Test_BFu0s_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu0s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu31ll, BFu0s_BFu7c_BFu31ll)
//============================================================================


struct  BFu0s_BFu7c_BFu32i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu7c_BFu32i) C1{ Fs:0 Fc:7 Fi:32}



static void Test_BFu0s_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu32i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu32i, BFu0s_BFu7c_BFu32i)
//============================================================================


struct  BFu0s_BFu7c_BFu32ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu7c_BFu32ll) C1{ Fs:0 Fc:7 FL:32}



static void Test_BFu0s_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu0s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu32ll, BFu0s_BFu7c_BFu32ll)
//============================================================================


struct  BFu0s_BFu7c_BFu33  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu7c_BFu33) C1{ Fs:0 Fc:7 FL:33}



static void Test_BFu0s_BFu7c_BFu33()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu33");
    static STRUCT_IF_C BFu0s_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu0s_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu33, BFu0s_BFu7c_BFu33)
//============================================================================


struct  BFu0s_BFu7c_BFu7c  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu7c_BFu7c) C1{ Fs:0 Fc:7 Fc:7}



static void Test_BFu0s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu0s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu7c, BFu0s_BFu7c_BFu7c)
//============================================================================


struct  BFu0s_BFu7c_BFu7i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu7c_BFu7i) C1{ Fs:0 Fc:7 Fi:7}



static void Test_BFu0s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu7i, BFu0s_BFu7c_BFu7i)
//============================================================================


struct  BFu0s_BFu7c_BFu7ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu7c_BFu7ll) C1{ Fs:0 Fc:7 FL:7}



static void Test_BFu0s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu7ll, BFu0s_BFu7c_BFu7ll)
//============================================================================


struct  BFu0s_BFu7c_BFu7s  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu7c_BFu7s) C1{ Fs:0 Fc:7 Fs:7}



static void Test_BFu0s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu0s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu7s, BFu0s_BFu7c_BFu7s)
//============================================================================


struct  BFu0s_BFu7c_BFu8c  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu7c_BFu8c) C1{ Fs:0 Fc:7 Fc:8}



static void Test_BFu0s_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu8c");
    static STRUCT_IF_C BFu0s_BFu7c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu8c, BFu0s_BFu7c_BFu8c)
//============================================================================


struct  BFu0s_BFu7c_BFu8i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu7c_BFu8i) C1{ Fs:0 Fc:7 Fi:8}



static void Test_BFu0s_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu8i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu8i, BFu0s_BFu7c_BFu8i)
//============================================================================


struct  BFu0s_BFu7c_BFu8ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu7c_BFu8ll) C1{ Fs:0 Fc:7 FL:8}



static void Test_BFu0s_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu8ll, BFu0s_BFu7c_BFu8ll)
//============================================================================


struct  BFu0s_BFu7c_BFu8s  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu7c_BFu8s) C1{ Fs:0 Fc:7 Fs:8}



static void Test_BFu0s_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu8s");
    static STRUCT_IF_C BFu0s_BFu7c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu8s, BFu0s_BFu7c_BFu8s)
//============================================================================


struct  BFu0s_BFu7c_BFu9i  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu7c_BFu9i) C1{ Fs:0 Fc:7 Fi:9}



static void Test_BFu0s_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu9i");
    static STRUCT_IF_C BFu0s_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu9i, BFu0s_BFu7c_BFu9i)
//============================================================================


struct  BFu0s_BFu7c_BFu9ll  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu7c_BFu9ll) C1{ Fs:0 Fc:7 FL:9}



static void Test_BFu0s_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu9ll, BFu0s_BFu7c_BFu9ll)
//============================================================================


struct  BFu0s_BFu7c_BFu9s  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu7c_BFu9s) C1{ Fs:0 Fc:7 Fs:9}



static void Test_BFu0s_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu7c_BFu9s");
    static STRUCT_IF_C BFu0s_BFu7c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_BFu9s, BFu0s_BFu7c_BFu9s)
//============================================================================


struct  BFu0s_BFu7c_C  {
  unsigned short  :0;
  unsigned char v1:7;
  char v2;
};
//SIG(1 BFu0s_BFu7c_C) C1{ Fs:0 Fc:7 Fc}



static void Test_BFu0s_BFu7c_C()
{
  {
    init_simple_test("BFu0s_BFu7c_C");
    static STRUCT_IF_C BFu0s_BFu7c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu7c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_C, BFu0s_BFu7c_C)
//============================================================================


struct  BFu0s_BFu7c_D  {
  unsigned short  :0;
  unsigned char v1:7;
  double v2;
};
//SIG(1 BFu0s_BFu7c_D) C1{ Fs:0 Fc:7 FL}



static void Test_BFu0s_BFu7c_D()
{
  {
    init_simple_test("BFu0s_BFu7c_D");
    static STRUCT_IF_C BFu0s_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_D, BFu0s_BFu7c_D)
//============================================================================


struct  BFu0s_BFu7c_F  {
  unsigned short  :0;
  unsigned char v1:7;
  float v2;
};
//SIG(1 BFu0s_BFu7c_F) C1{ Fs:0 Fc:7 Fi}



static void Test_BFu0s_BFu7c_F()
{
  {
    init_simple_test("BFu0s_BFu7c_F");
    static STRUCT_IF_C BFu0s_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_F, BFu0s_BFu7c_F)
//============================================================================


struct  BFu0s_BFu7c_I  {
  unsigned short  :0;
  unsigned char v1:7;
  int v2;
};
//SIG(1 BFu0s_BFu7c_I) C1{ Fs:0 Fc:7 Fi}



static void Test_BFu0s_BFu7c_I()
{
  {
    init_simple_test("BFu0s_BFu7c_I");
    static STRUCT_IF_C BFu0s_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_I, BFu0s_BFu7c_I)
//============================================================================


struct  BFu0s_BFu7c_Ip  {
  unsigned short  :0;
  unsigned char v1:7;
  int *v2;
};
//SIG(1 BFu0s_BFu7c_Ip) C1{ Fs:0 Fc:7 Fp}



static void Test_BFu0s_BFu7c_Ip()
{
  {
    init_simple_test("BFu0s_BFu7c_Ip");
    static STRUCT_IF_C BFu0s_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_Ip, BFu0s_BFu7c_Ip)
//============================================================================


struct  BFu0s_BFu7c_L  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu7c_L) C1{ Fs:0 Fc:7 FL}



static void Test_BFu0s_BFu7c_L()
{
  {
    init_simple_test("BFu0s_BFu7c_L");
    static STRUCT_IF_C BFu0s_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_L, BFu0s_BFu7c_L)
//============================================================================


struct  BFu0s_BFu7c_S  {
  unsigned short  :0;
  unsigned char v1:7;
  short v2;
};
//SIG(1 BFu0s_BFu7c_S) C1{ Fs:0 Fc:7 Fs}



static void Test_BFu0s_BFu7c_S()
{
  {
    init_simple_test("BFu0s_BFu7c_S");
    static STRUCT_IF_C BFu0s_BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu7c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_S, BFu0s_BFu7c_S)
//============================================================================


struct  BFu0s_BFu7c_Uc  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu7c_Uc) C1{ Fs:0 Fc:7 Fc}



static void Test_BFu0s_BFu7c_Uc()
{
  {
    init_simple_test("BFu0s_BFu7c_Uc");
    static STRUCT_IF_C BFu0s_BFu7c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7c_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu7c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_Uc, BFu0s_BFu7c_Uc)
//============================================================================


struct  BFu0s_BFu7c_Ui  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu7c_Ui) C1{ Fs:0 Fc:7 Fi}



static void Test_BFu0s_BFu7c_Ui()
{
  {
    init_simple_test("BFu0s_BFu7c_Ui");
    static STRUCT_IF_C BFu0s_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_Ui, BFu0s_BFu7c_Ui)
//============================================================================


struct  BFu0s_BFu7c_Ul  {
  unsigned short  :0;
  unsigned char v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu7c_Ul) C1{ Fs:0 Fc:7 FL}



static void Test_BFu0s_BFu7c_Ul()
{
  {
    init_simple_test("BFu0s_BFu7c_Ul");
    static STRUCT_IF_C BFu0s_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_Ul, BFu0s_BFu7c_Ul)
//============================================================================


struct  BFu0s_BFu7c_Us  {
  unsigned short  :0;
  unsigned char v1:7;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu7c_Us) C1{ Fs:0 Fc:7 Fs}



static void Test_BFu0s_BFu7c_Us()
{
  {
    init_simple_test("BFu0s_BFu7c_Us");
    static STRUCT_IF_C BFu0s_BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu7c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_Us, BFu0s_BFu7c_Us)
//============================================================================


struct  BFu0s_BFu7c_Vp  {
  unsigned short  :0;
  unsigned char v1:7;
  void *v2;
};
//SIG(1 BFu0s_BFu7c_Vp) C1{ Fs:0 Fc:7 Fp}



static void Test_BFu0s_BFu7c_Vp()
{
  {
    init_simple_test("BFu0s_BFu7c_Vp");
    static STRUCT_IF_C BFu0s_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7c_Vp, BFu0s_BFu7c_Vp)
//============================================================================


struct  BFu0s_BFu7i  {
  unsigned short  :0;
  unsigned int v1:7;
};
//SIG(1 BFu0s_BFu7i) C1{ Fs:0 Fi:7}



static void Test_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu7i");
    static STRUCT_IF_C BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i, BFu0s_BFu7i)
//============================================================================


struct  BFu0s_BFu7i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu7i_BFu0c) C1{ Fs:0 Fi:7 Fc:0}



static void Test_BFu0s_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu0c, BFu0s_BFu7i_BFu0c)
//============================================================================


struct  BFu0s_BFu7i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu7i_BFu0i) C1{ Fs:0 Fi:7 Fi:0}



static void Test_BFu0s_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu0i, BFu0s_BFu7i_BFu0i)
//============================================================================


struct  BFu0s_BFu7i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu7i_BFu0ll) C1{ Fs:0 Fi:7 FL:0}



static void Test_BFu0s_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu0ll, BFu0s_BFu7i_BFu0ll)
//============================================================================


struct  BFu0s_BFu7i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu7i_BFu0s) C1{ Fs:0 Fi:7 Fs:0}



static void Test_BFu0s_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu0s, BFu0s_BFu7i_BFu0s)
//============================================================================


struct  BFu0s_BFu7i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu7i_BFu15i) C1{ Fs:0 Fi:7 Fi:15}



static void Test_BFu0s_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0s_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu15i, BFu0s_BFu7i_BFu15i)
//============================================================================


struct  BFu0s_BFu7i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu7i_BFu15ll) C1{ Fs:0 Fi:7 FL:15}



static void Test_BFu0s_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu15ll, BFu0s_BFu7i_BFu15ll)
//============================================================================


struct  BFu0s_BFu7i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu7i_BFu15s) C1{ Fs:0 Fi:7 Fs:15}



static void Test_BFu0s_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu15s, BFu0s_BFu7i_BFu15s)
//============================================================================


struct  BFu0s_BFu7i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu7i_BFu16i) C1{ Fs:0 Fi:7 Fi:16}



static void Test_BFu0s_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0s_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu16i, BFu0s_BFu7i_BFu16i)
//============================================================================


struct  BFu0s_BFu7i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu7i_BFu16ll) C1{ Fs:0 Fi:7 FL:16}



static void Test_BFu0s_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu16ll, BFu0s_BFu7i_BFu16ll)
//============================================================================


struct  BFu0s_BFu7i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu7i_BFu16s) C1{ Fs:0 Fi:7 Fs:16}



static void Test_BFu0s_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu16s, BFu0s_BFu7i_BFu16s)
//============================================================================


struct  BFu0s_BFu7i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu7i_BFu17i) C1{ Fs:0 Fi:7 Fi:17}



static void Test_BFu0s_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0s_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu17i, BFu0s_BFu7i_BFu17i)
//============================================================================


struct  BFu0s_BFu7i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu7i_BFu17ll) C1{ Fs:0 Fi:7 FL:17}



static void Test_BFu0s_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu17ll, BFu0s_BFu7i_BFu17ll)
//============================================================================


struct  BFu0s_BFu7i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu7i_BFu1c) C1{ Fs:0 Fi:7 Fc:1}



static void Test_BFu0s_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu1c, BFu0s_BFu7i_BFu1c)
//============================================================================


struct  BFu0s_BFu7i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu7i_BFu1i) C1{ Fs:0 Fi:7 Fi:1}



static void Test_BFu0s_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu1i, BFu0s_BFu7i_BFu1i)
//============================================================================


struct  BFu0s_BFu7i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu7i_BFu1ll) C1{ Fs:0 Fi:7 FL:1}



static void Test_BFu0s_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu1ll, BFu0s_BFu7i_BFu1ll)
//============================================================================


struct  BFu0s_BFu7i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu7i_BFu1s) C1{ Fs:0 Fi:7 Fs:1}



static void Test_BFu0s_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu1s, BFu0s_BFu7i_BFu1s)
//============================================================================


struct  BFu0s_BFu7i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu7i_BFu31i) C1{ Fs:0 Fi:7 Fi:31}



static void Test_BFu0s_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu31i, BFu0s_BFu7i_BFu31i)
//============================================================================


struct  BFu0s_BFu7i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu7i_BFu31ll) C1{ Fs:0 Fi:7 FL:31}



static void Test_BFu0s_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu0s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu31ll, BFu0s_BFu7i_BFu31ll)
//============================================================================


struct  BFu0s_BFu7i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu7i_BFu32i) C1{ Fs:0 Fi:7 Fi:32}



static void Test_BFu0s_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu32i, BFu0s_BFu7i_BFu32i)
//============================================================================


struct  BFu0s_BFu7i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu7i_BFu32ll) C1{ Fs:0 Fi:7 FL:32}



static void Test_BFu0s_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu0s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu32ll, BFu0s_BFu7i_BFu32ll)
//============================================================================


struct  BFu0s_BFu7i_BFu33  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu7i_BFu33) C1{ Fs:0 Fi:7 FL:33}



static void Test_BFu0s_BFu7i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu33");
    static STRUCT_IF_C BFu0s_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu0s_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu33, BFu0s_BFu7i_BFu33)
//============================================================================


struct  BFu0s_BFu7i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu7i_BFu7c) C1{ Fs:0 Fi:7 Fc:7}



static void Test_BFu0s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu7c, BFu0s_BFu7i_BFu7c)
//============================================================================


struct  BFu0s_BFu7i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu7i_BFu7i) C1{ Fs:0 Fi:7 Fi:7}



static void Test_BFu0s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu7i, BFu0s_BFu7i_BFu7i)
//============================================================================


struct  BFu0s_BFu7i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu7i_BFu7ll) C1{ Fs:0 Fi:7 FL:7}



static void Test_BFu0s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu7ll, BFu0s_BFu7i_BFu7ll)
//============================================================================


struct  BFu0s_BFu7i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu7i_BFu7s) C1{ Fs:0 Fi:7 Fs:7}



static void Test_BFu0s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu7s, BFu0s_BFu7i_BFu7s)
//============================================================================


struct  BFu0s_BFu7i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu7i_BFu8c) C1{ Fs:0 Fi:7 Fc:8}



static void Test_BFu0s_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu8c, BFu0s_BFu7i_BFu8c)
//============================================================================


struct  BFu0s_BFu7i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu7i_BFu8i) C1{ Fs:0 Fi:7 Fi:8}



static void Test_BFu0s_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu8i, BFu0s_BFu7i_BFu8i)
//============================================================================


struct  BFu0s_BFu7i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu7i_BFu8ll) C1{ Fs:0 Fi:7 FL:8}



static void Test_BFu0s_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu8ll, BFu0s_BFu7i_BFu8ll)
//============================================================================


struct  BFu0s_BFu7i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu7i_BFu8s) C1{ Fs:0 Fi:7 Fs:8}



static void Test_BFu0s_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu8s, BFu0s_BFu7i_BFu8s)
//============================================================================


struct  BFu0s_BFu7i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu7i_BFu9i) C1{ Fs:0 Fi:7 Fi:9}



static void Test_BFu0s_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu9i, BFu0s_BFu7i_BFu9i)
//============================================================================


struct  BFu0s_BFu7i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu7i_BFu9ll) C1{ Fs:0 Fi:7 FL:9}



static void Test_BFu0s_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu9ll, BFu0s_BFu7i_BFu9ll)
//============================================================================


struct  BFu0s_BFu7i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu7i_BFu9s) C1{ Fs:0 Fi:7 Fs:9}



static void Test_BFu0s_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu7i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_BFu9s, BFu0s_BFu7i_BFu9s)
//============================================================================


struct  BFu0s_BFu7i_C  {
  unsigned short  :0;
  unsigned int v1:7;
  char v2;
};
//SIG(1 BFu0s_BFu7i_C) C1{ Fs:0 Fi:7 Fc}



static void Test_BFu0s_BFu7i_C()
{
  {
    init_simple_test("BFu0s_BFu7i_C");
    static STRUCT_IF_C BFu0s_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu7i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_C, BFu0s_BFu7i_C)
//============================================================================


struct  BFu0s_BFu7i_D  {
  unsigned short  :0;
  unsigned int v1:7;
  double v2;
};
//SIG(1 BFu0s_BFu7i_D) C1{ Fs:0 Fi:7 FL}



static void Test_BFu0s_BFu7i_D()
{
  {
    init_simple_test("BFu0s_BFu7i_D");
    static STRUCT_IF_C BFu0s_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_D, BFu0s_BFu7i_D)
//============================================================================


struct  BFu0s_BFu7i_F  {
  unsigned short  :0;
  unsigned int v1:7;
  float v2;
};
//SIG(1 BFu0s_BFu7i_F) C1{ Fs:0 Fi:7 Fi}



static void Test_BFu0s_BFu7i_F()
{
  {
    init_simple_test("BFu0s_BFu7i_F");
    static STRUCT_IF_C BFu0s_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_F, BFu0s_BFu7i_F)
//============================================================================


struct  BFu0s_BFu7i_I  {
  unsigned short  :0;
  unsigned int v1:7;
  int v2;
};
//SIG(1 BFu0s_BFu7i_I) C1{ Fs:0 Fi:7 Fi}



static void Test_BFu0s_BFu7i_I()
{
  {
    init_simple_test("BFu0s_BFu7i_I");
    static STRUCT_IF_C BFu0s_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_I, BFu0s_BFu7i_I)
//============================================================================


struct  BFu0s_BFu7i_Ip  {
  unsigned short  :0;
  unsigned int v1:7;
  int *v2;
};
//SIG(1 BFu0s_BFu7i_Ip) C1{ Fs:0 Fi:7 Fp}



static void Test_BFu0s_BFu7i_Ip()
{
  {
    init_simple_test("BFu0s_BFu7i_Ip");
    static STRUCT_IF_C BFu0s_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_Ip, BFu0s_BFu7i_Ip)
//============================================================================


struct  BFu0s_BFu7i_L  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu7i_L) C1{ Fs:0 Fi:7 FL}



static void Test_BFu0s_BFu7i_L()
{
  {
    init_simple_test("BFu0s_BFu7i_L");
    static STRUCT_IF_C BFu0s_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_L, BFu0s_BFu7i_L)
//============================================================================


struct  BFu0s_BFu7i_S  {
  unsigned short  :0;
  unsigned int v1:7;
  short v2;
};
//SIG(1 BFu0s_BFu7i_S) C1{ Fs:0 Fi:7 Fs}



static void Test_BFu0s_BFu7i_S()
{
  {
    init_simple_test("BFu0s_BFu7i_S");
    static STRUCT_IF_C BFu0s_BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu7i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_S, BFu0s_BFu7i_S)
//============================================================================


struct  BFu0s_BFu7i_Uc  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu7i_Uc) C1{ Fs:0 Fi:7 Fc}



static void Test_BFu0s_BFu7i_Uc()
{
  {
    init_simple_test("BFu0s_BFu7i_Uc");
    static STRUCT_IF_C BFu0s_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu7i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_Uc, BFu0s_BFu7i_Uc)
//============================================================================


struct  BFu0s_BFu7i_Ui  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu7i_Ui) C1{ Fs:0 Fi:7 Fi}



static void Test_BFu0s_BFu7i_Ui()
{
  {
    init_simple_test("BFu0s_BFu7i_Ui");
    static STRUCT_IF_C BFu0s_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_Ui, BFu0s_BFu7i_Ui)
//============================================================================


struct  BFu0s_BFu7i_Ul  {
  unsigned short  :0;
  unsigned int v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu7i_Ul) C1{ Fs:0 Fi:7 FL}



static void Test_BFu0s_BFu7i_Ul()
{
  {
    init_simple_test("BFu0s_BFu7i_Ul");
    static STRUCT_IF_C BFu0s_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_Ul, BFu0s_BFu7i_Ul)
//============================================================================


struct  BFu0s_BFu7i_Us  {
  unsigned short  :0;
  unsigned int v1:7;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu7i_Us) C1{ Fs:0 Fi:7 Fs}



static void Test_BFu0s_BFu7i_Us()
{
  {
    init_simple_test("BFu0s_BFu7i_Us");
    static STRUCT_IF_C BFu0s_BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu7i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_Us, BFu0s_BFu7i_Us)
//============================================================================


struct  BFu0s_BFu7i_Vp  {
  unsigned short  :0;
  unsigned int v1:7;
  void *v2;
};
//SIG(1 BFu0s_BFu7i_Vp) C1{ Fs:0 Fi:7 Fp}



static void Test_BFu0s_BFu7i_Vp()
{
  {
    init_simple_test("BFu0s_BFu7i_Vp");
    static STRUCT_IF_C BFu0s_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7i_Vp, BFu0s_BFu7i_Vp)
//============================================================================


struct  BFu0s_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:7;
};
//SIG(1 BFu0s_BFu7ll) C1{ Fs:0 FL:7}



static void Test_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll, BFu0s_BFu7ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu7ll_BFu0c) C1{ Fs:0 FL:7 Fc:0}



static void Test_BFu0s_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu0c, BFu0s_BFu7ll_BFu0c)
//============================================================================


struct  BFu0s_BFu7ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu7ll_BFu0i) C1{ Fs:0 FL:7 Fi:0}



static void Test_BFu0s_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu0i, BFu0s_BFu7ll_BFu0i)
//============================================================================


struct  BFu0s_BFu7ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu7ll_BFu0ll) C1{ Fs:0 FL:7 FL:0}



static void Test_BFu0s_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu0ll, BFu0s_BFu7ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu7ll_BFu0s) C1{ Fs:0 FL:7 Fs:0}



static void Test_BFu0s_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu0s, BFu0s_BFu7ll_BFu0s)
//============================================================================


struct  BFu0s_BFu7ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu7ll_BFu15i) C1{ Fs:0 FL:7 Fi:15}



static void Test_BFu0s_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu15i, BFu0s_BFu7ll_BFu15i)
//============================================================================


struct  BFu0s_BFu7ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu7ll_BFu15ll) C1{ Fs:0 FL:7 FL:15}



static void Test_BFu0s_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu15ll, BFu0s_BFu7ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu7ll_BFu15s) C1{ Fs:0 FL:7 Fs:15}



static void Test_BFu0s_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu15s, BFu0s_BFu7ll_BFu15s)
//============================================================================


struct  BFu0s_BFu7ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu7ll_BFu16i) C1{ Fs:0 FL:7 Fi:16}



static void Test_BFu0s_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu16i, BFu0s_BFu7ll_BFu16i)
//============================================================================


struct  BFu0s_BFu7ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu7ll_BFu16ll) C1{ Fs:0 FL:7 FL:16}



static void Test_BFu0s_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu16ll, BFu0s_BFu7ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu7ll_BFu16s) C1{ Fs:0 FL:7 Fs:16}



static void Test_BFu0s_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu16s, BFu0s_BFu7ll_BFu16s)
//============================================================================


struct  BFu0s_BFu7ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu7ll_BFu17i) C1{ Fs:0 FL:7 Fi:17}



static void Test_BFu0s_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu17i, BFu0s_BFu7ll_BFu17i)
//============================================================================


struct  BFu0s_BFu7ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu7ll_BFu17ll) C1{ Fs:0 FL:7 FL:17}



static void Test_BFu0s_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu17ll, BFu0s_BFu7ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu7ll_BFu1c) C1{ Fs:0 FL:7 Fc:1}



static void Test_BFu0s_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu1c, BFu0s_BFu7ll_BFu1c)
//============================================================================


struct  BFu0s_BFu7ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu7ll_BFu1i) C1{ Fs:0 FL:7 Fi:1}



static void Test_BFu0s_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu1i, BFu0s_BFu7ll_BFu1i)
//============================================================================


struct  BFu0s_BFu7ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu7ll_BFu1ll) C1{ Fs:0 FL:7 FL:1}



static void Test_BFu0s_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu1ll, BFu0s_BFu7ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu7ll_BFu1s) C1{ Fs:0 FL:7 Fs:1}



static void Test_BFu0s_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu1s, BFu0s_BFu7ll_BFu1s)
//============================================================================


struct  BFu0s_BFu7ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu7ll_BFu31i) C1{ Fs:0 FL:7 Fi:31}



static void Test_BFu0s_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu31i, BFu0s_BFu7ll_BFu31i)
//============================================================================


struct  BFu0s_BFu7ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu7ll_BFu31ll) C1{ Fs:0 FL:7 FL:31}



static void Test_BFu0s_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu0s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu31ll, BFu0s_BFu7ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu7ll_BFu32i) C1{ Fs:0 FL:7 Fi:32}



static void Test_BFu0s_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu32i, BFu0s_BFu7ll_BFu32i)
//============================================================================


struct  BFu0s_BFu7ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu7ll_BFu32ll) C1{ Fs:0 FL:7 FL:32}



static void Test_BFu0s_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu0s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu32ll, BFu0s_BFu7ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu7ll_BFu33) C1{ Fs:0 FL:7 FL:33}



static void Test_BFu0s_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu0s_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu33, BFu0s_BFu7ll_BFu33)
//============================================================================


struct  BFu0s_BFu7ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu7ll_BFu7c) C1{ Fs:0 FL:7 Fc:7}



static void Test_BFu0s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu7c, BFu0s_BFu7ll_BFu7c)
//============================================================================


struct  BFu0s_BFu7ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu7ll_BFu7i) C1{ Fs:0 FL:7 Fi:7}



static void Test_BFu0s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu7i, BFu0s_BFu7ll_BFu7i)
//============================================================================


struct  BFu0s_BFu7ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu7ll_BFu7ll) C1{ Fs:0 FL:7 FL:7}



static void Test_BFu0s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu7ll, BFu0s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu7ll_BFu7s) C1{ Fs:0 FL:7 Fs:7}



static void Test_BFu0s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu7s, BFu0s_BFu7ll_BFu7s)
//============================================================================


struct  BFu0s_BFu7ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu7ll_BFu8c) C1{ Fs:0 FL:7 Fc:8}



static void Test_BFu0s_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu8c, BFu0s_BFu7ll_BFu8c)
//============================================================================


struct  BFu0s_BFu7ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu7ll_BFu8i) C1{ Fs:0 FL:7 Fi:8}



static void Test_BFu0s_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu8i, BFu0s_BFu7ll_BFu8i)
//============================================================================


struct  BFu0s_BFu7ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu7ll_BFu8ll) C1{ Fs:0 FL:7 FL:8}



static void Test_BFu0s_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu8ll, BFu0s_BFu7ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu7ll_BFu8s) C1{ Fs:0 FL:7 Fs:8}



static void Test_BFu0s_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu8s, BFu0s_BFu7ll_BFu8s)
//============================================================================


struct  BFu0s_BFu7ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu7ll_BFu9i) C1{ Fs:0 FL:7 Fi:9}



static void Test_BFu0s_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu9i, BFu0s_BFu7ll_BFu9i)
//============================================================================


struct  BFu0s_BFu7ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu7ll_BFu9ll) C1{ Fs:0 FL:7 FL:9}



static void Test_BFu0s_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu9ll, BFu0s_BFu7ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu7ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu7ll_BFu9s) C1{ Fs:0 FL:7 Fs:9}



static void Test_BFu0s_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_BFu9s, BFu0s_BFu7ll_BFu9s)
//============================================================================


struct  BFu0s_BFu7ll_C  {
  unsigned short  :0;
  __tsu64 v1:7;
  char v2;
};
//SIG(1 BFu0s_BFu7ll_C) C1{ Fs:0 FL:7 Fc}



static void Test_BFu0s_BFu7ll_C()
{
  {
    init_simple_test("BFu0s_BFu7ll_C");
    static STRUCT_IF_C BFu0s_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu7ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_C, BFu0s_BFu7ll_C)
//============================================================================


struct  BFu0s_BFu7ll_D  {
  unsigned short  :0;
  __tsu64 v1:7;
  double v2;
};
//SIG(1 BFu0s_BFu7ll_D) C1{ Fs:0 FL:7 FL}



static void Test_BFu0s_BFu7ll_D()
{
  {
    init_simple_test("BFu0s_BFu7ll_D");
    static STRUCT_IF_C BFu0s_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_D, BFu0s_BFu7ll_D)
//============================================================================


struct  BFu0s_BFu7ll_F  {
  unsigned short  :0;
  __tsu64 v1:7;
  float v2;
};
//SIG(1 BFu0s_BFu7ll_F) C1{ Fs:0 FL:7 Fi}



static void Test_BFu0s_BFu7ll_F()
{
  {
    init_simple_test("BFu0s_BFu7ll_F");
    static STRUCT_IF_C BFu0s_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_F, BFu0s_BFu7ll_F)
//============================================================================


struct  BFu0s_BFu7ll_I  {
  unsigned short  :0;
  __tsu64 v1:7;
  int v2;
};
//SIG(1 BFu0s_BFu7ll_I) C1{ Fs:0 FL:7 Fi}



static void Test_BFu0s_BFu7ll_I()
{
  {
    init_simple_test("BFu0s_BFu7ll_I");
    static STRUCT_IF_C BFu0s_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_I, BFu0s_BFu7ll_I)
//============================================================================


struct  BFu0s_BFu7ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:7;
  int *v2;
};
//SIG(1 BFu0s_BFu7ll_Ip) C1{ Fs:0 FL:7 Fp}



static void Test_BFu0s_BFu7ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu7ll_Ip");
    static STRUCT_IF_C BFu0s_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_Ip, BFu0s_BFu7ll_Ip)
//============================================================================


struct  BFu0s_BFu7ll_L  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu7ll_L) C1{ Fs:0 FL:7 FL}



static void Test_BFu0s_BFu7ll_L()
{
  {
    init_simple_test("BFu0s_BFu7ll_L");
    static STRUCT_IF_C BFu0s_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_L, BFu0s_BFu7ll_L)
//============================================================================


struct  BFu0s_BFu7ll_S  {
  unsigned short  :0;
  __tsu64 v1:7;
  short v2;
};
//SIG(1 BFu0s_BFu7ll_S) C1{ Fs:0 FL:7 Fs}



static void Test_BFu0s_BFu7ll_S()
{
  {
    init_simple_test("BFu0s_BFu7ll_S");
    static STRUCT_IF_C BFu0s_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu7ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_S, BFu0s_BFu7ll_S)
//============================================================================


struct  BFu0s_BFu7ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu7ll_Uc) C1{ Fs:0 FL:7 Fc}



static void Test_BFu0s_BFu7ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu7ll_Uc");
    static STRUCT_IF_C BFu0s_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu7ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_Uc, BFu0s_BFu7ll_Uc)
//============================================================================


struct  BFu0s_BFu7ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu7ll_Ui) C1{ Fs:0 FL:7 Fi}



static void Test_BFu0s_BFu7ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu7ll_Ui");
    static STRUCT_IF_C BFu0s_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_Ui, BFu0s_BFu7ll_Ui)
//============================================================================


struct  BFu0s_BFu7ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu7ll_Ul) C1{ Fs:0 FL:7 FL}



static void Test_BFu0s_BFu7ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu7ll_Ul");
    static STRUCT_IF_C BFu0s_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_Ul, BFu0s_BFu7ll_Ul)
//============================================================================


struct  BFu0s_BFu7ll_Us  {
  unsigned short  :0;
  __tsu64 v1:7;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu7ll_Us) C1{ Fs:0 FL:7 Fs}



static void Test_BFu0s_BFu7ll_Us()
{
  {
    init_simple_test("BFu0s_BFu7ll_Us");
    static STRUCT_IF_C BFu0s_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu7ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_Us, BFu0s_BFu7ll_Us)
//============================================================================


struct  BFu0s_BFu7ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:7;
  void *v2;
};
//SIG(1 BFu0s_BFu7ll_Vp) C1{ Fs:0 FL:7 Fp}



static void Test_BFu0s_BFu7ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu7ll_Vp");
    static STRUCT_IF_C BFu0s_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7ll_Vp, BFu0s_BFu7ll_Vp)
//============================================================================


struct  BFu0s_BFu7s  {
  unsigned short  :0;
  unsigned short v1:7;
};
//SIG(1 BFu0s_BFu7s) C1{ Fs:0 Fs:7}



static void Test_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu7s");
    static STRUCT_IF_C BFu0s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s, BFu0s_BFu7s)
//============================================================================


struct  BFu0s_BFu7s_BFu0c  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu7s_BFu0c) C1{ Fs:0 Fs:7 Fc:0}



static void Test_BFu0s_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu0c, BFu0s_BFu7s_BFu0c)
//============================================================================


struct  BFu0s_BFu7s_BFu0i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu7s_BFu0i) C1{ Fs:0 Fs:7 Fi:0}



static void Test_BFu0s_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu0i, BFu0s_BFu7s_BFu0i)
//============================================================================


struct  BFu0s_BFu7s_BFu0ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu7s_BFu0ll) C1{ Fs:0 Fs:7 FL:0}



static void Test_BFu0s_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu0ll, BFu0s_BFu7s_BFu0ll)
//============================================================================


struct  BFu0s_BFu7s_BFu0s  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu7s_BFu0s) C1{ Fs:0 Fs:7 Fs:0}



static void Test_BFu0s_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu0s, BFu0s_BFu7s_BFu0s)
//============================================================================


struct  BFu0s_BFu7s_BFu15i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu7s_BFu15i) C1{ Fs:0 Fs:7 Fi:15}



static void Test_BFu0s_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu15i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0s_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu15i, BFu0s_BFu7s_BFu15i)
//============================================================================


struct  BFu0s_BFu7s_BFu15ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu7s_BFu15ll) C1{ Fs:0 Fs:7 FL:15}



static void Test_BFu0s_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu0s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu0s_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu15ll, BFu0s_BFu7s_BFu15ll)
//============================================================================


struct  BFu0s_BFu7s_BFu15s  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu7s_BFu15s) C1{ Fs:0 Fs:7 Fs:15}



static void Test_BFu0s_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu15s");
    static STRUCT_IF_C BFu0s_BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu15s, BFu0s_BFu7s_BFu15s)
//============================================================================


struct  BFu0s_BFu7s_BFu16i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu7s_BFu16i) C1{ Fs:0 Fs:7 Fi:16}



static void Test_BFu0s_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu16i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0s_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu16i, BFu0s_BFu7s_BFu16i)
//============================================================================


struct  BFu0s_BFu7s_BFu16ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu7s_BFu16ll) C1{ Fs:0 Fs:7 FL:16}



static void Test_BFu0s_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu0s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu0s_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu16ll, BFu0s_BFu7s_BFu16ll)
//============================================================================


struct  BFu0s_BFu7s_BFu16s  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu7s_BFu16s) C1{ Fs:0 Fs:7 Fs:16}



static void Test_BFu0s_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu16s");
    static STRUCT_IF_C BFu0s_BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu16s, BFu0s_BFu7s_BFu16s)
//============================================================================


struct  BFu0s_BFu7s_BFu17i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu7s_BFu17i) C1{ Fs:0 Fs:7 Fi:17}



static void Test_BFu0s_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu17i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0s_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu17i, BFu0s_BFu7s_BFu17i)
//============================================================================


struct  BFu0s_BFu7s_BFu17ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu7s_BFu17ll) C1{ Fs:0 Fs:7 FL:17}



static void Test_BFu0s_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu0s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu0s_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu17ll, BFu0s_BFu7s_BFu17ll)
//============================================================================


struct  BFu0s_BFu7s_BFu1c  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu7s_BFu1c) C1{ Fs:0 Fs:7 Fc:1}



static void Test_BFu0s_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu1c");
    static STRUCT_IF_C BFu0s_BFu7s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu1c, BFu0s_BFu7s_BFu1c)
//============================================================================


struct  BFu0s_BFu7s_BFu1i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu7s_BFu1i) C1{ Fs:0 Fs:7 Fi:1}



static void Test_BFu0s_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu1i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu1i, BFu0s_BFu7s_BFu1i)
//============================================================================


struct  BFu0s_BFu7s_BFu1ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu7s_BFu1ll) C1{ Fs:0 Fs:7 FL:1}



static void Test_BFu0s_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu1ll, BFu0s_BFu7s_BFu1ll)
//============================================================================


struct  BFu0s_BFu7s_BFu1s  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu7s_BFu1s) C1{ Fs:0 Fs:7 Fs:1}



static void Test_BFu0s_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu1s");
    static STRUCT_IF_C BFu0s_BFu7s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu0s_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu1s, BFu0s_BFu7s_BFu1s)
//============================================================================


struct  BFu0s_BFu7s_BFu31i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu7s_BFu31i) C1{ Fs:0 Fs:7 Fi:31}



static void Test_BFu0s_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu31i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu31i, BFu0s_BFu7s_BFu31i)
//============================================================================


struct  BFu0s_BFu7s_BFu31ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu7s_BFu31ll) C1{ Fs:0 Fs:7 FL:31}



static void Test_BFu0s_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu0s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu0s_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu31ll, BFu0s_BFu7s_BFu31ll)
//============================================================================


struct  BFu0s_BFu7s_BFu32i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu7s_BFu32i) C1{ Fs:0 Fs:7 Fi:32}



static void Test_BFu0s_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu32i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu32i, BFu0s_BFu7s_BFu32i)
//============================================================================


struct  BFu0s_BFu7s_BFu32ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu7s_BFu32ll) C1{ Fs:0 Fs:7 FL:32}



static void Test_BFu0s_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu0s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu0s_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu32ll, BFu0s_BFu7s_BFu32ll)
//============================================================================


struct  BFu0s_BFu7s_BFu33  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu7s_BFu33) C1{ Fs:0 Fs:7 FL:33}



static void Test_BFu0s_BFu7s_BFu33()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu33");
    static STRUCT_IF_C BFu0s_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu0s_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu0s_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu33, BFu0s_BFu7s_BFu33)
//============================================================================


struct  BFu0s_BFu7s_BFu7c  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu7s_BFu7c) C1{ Fs:0 Fs:7 Fc:7}



static void Test_BFu0s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu0s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu7c, BFu0s_BFu7s_BFu7c)
//============================================================================


struct  BFu0s_BFu7s_BFu7i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu7s_BFu7i) C1{ Fs:0 Fs:7 Fi:7}



static void Test_BFu0s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu7i, BFu0s_BFu7s_BFu7i)
//============================================================================


struct  BFu0s_BFu7s_BFu7ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu7s_BFu7ll) C1{ Fs:0 Fs:7 FL:7}



static void Test_BFu0s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu7ll, BFu0s_BFu7s_BFu7ll)
//============================================================================


struct  BFu0s_BFu7s_BFu7s  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu7s_BFu7s) C1{ Fs:0 Fs:7 Fs:7}



static void Test_BFu0s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu0s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu0s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu7s, BFu0s_BFu7s_BFu7s)
//============================================================================


struct  BFu0s_BFu7s_BFu8c  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu7s_BFu8c) C1{ Fs:0 Fs:7 Fc:8}



static void Test_BFu0s_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu8c");
    static STRUCT_IF_C BFu0s_BFu7s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu8c, BFu0s_BFu7s_BFu8c)
//============================================================================


struct  BFu0s_BFu7s_BFu8i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu7s_BFu8i) C1{ Fs:0 Fs:7 Fi:8}



static void Test_BFu0s_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu8i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu8i, BFu0s_BFu7s_BFu8i)
//============================================================================


struct  BFu0s_BFu7s_BFu8ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu7s_BFu8ll) C1{ Fs:0 Fs:7 FL:8}



static void Test_BFu0s_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu8ll, BFu0s_BFu7s_BFu8ll)
//============================================================================


struct  BFu0s_BFu7s_BFu8s  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu7s_BFu8s) C1{ Fs:0 Fs:7 Fs:8}



static void Test_BFu0s_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu8s");
    static STRUCT_IF_C BFu0s_BFu7s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu0s_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu0s_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu8s, BFu0s_BFu7s_BFu8s)
//============================================================================


struct  BFu0s_BFu7s_BFu9i  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu7s_BFu9i) C1{ Fs:0 Fs:7 Fi:9}



static void Test_BFu0s_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu9i");
    static STRUCT_IF_C BFu0s_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu9i, BFu0s_BFu7s_BFu9i)
//============================================================================


struct  BFu0s_BFu7s_BFu9ll  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu7s_BFu9ll) C1{ Fs:0 Fs:7 FL:9}



static void Test_BFu0s_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu9ll, BFu0s_BFu7s_BFu9ll)
//============================================================================


struct  BFu0s_BFu7s_BFu9s  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu7s_BFu9s) C1{ Fs:0 Fs:7 Fs:9}



static void Test_BFu0s_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu7s_BFu9s");
    static STRUCT_IF_C BFu0s_BFu7s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu0s_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu0s_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_BFu9s, BFu0s_BFu7s_BFu9s)
//============================================================================


struct  BFu0s_BFu7s_C  {
  unsigned short  :0;
  unsigned short v1:7;
  char v2;
};
//SIG(1 BFu0s_BFu7s_C) C1{ Fs:0 Fs:7 Fc}



static void Test_BFu0s_BFu7s_C()
{
  {
    init_simple_test("BFu0s_BFu7s_C");
    static STRUCT_IF_C BFu0s_BFu7s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu7s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_C, BFu0s_BFu7s_C)
//============================================================================


struct  BFu0s_BFu7s_D  {
  unsigned short  :0;
  unsigned short v1:7;
  double v2;
};
//SIG(1 BFu0s_BFu7s_D) C1{ Fs:0 Fs:7 FL}



static void Test_BFu0s_BFu7s_D()
{
  {
    init_simple_test("BFu0s_BFu7s_D");
    static STRUCT_IF_C BFu0s_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_D, BFu0s_BFu7s_D)
//============================================================================


struct  BFu0s_BFu7s_F  {
  unsigned short  :0;
  unsigned short v1:7;
  float v2;
};
//SIG(1 BFu0s_BFu7s_F) C1{ Fs:0 Fs:7 Fi}



static void Test_BFu0s_BFu7s_F()
{
  {
    init_simple_test("BFu0s_BFu7s_F");
    static STRUCT_IF_C BFu0s_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_F, BFu0s_BFu7s_F)
//============================================================================


struct  BFu0s_BFu7s_I  {
  unsigned short  :0;
  unsigned short v1:7;
  int v2;
};
//SIG(1 BFu0s_BFu7s_I) C1{ Fs:0 Fs:7 Fi}



static void Test_BFu0s_BFu7s_I()
{
  {
    init_simple_test("BFu0s_BFu7s_I");
    static STRUCT_IF_C BFu0s_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_I, BFu0s_BFu7s_I)
//============================================================================


struct  BFu0s_BFu7s_Ip  {
  unsigned short  :0;
  unsigned short v1:7;
  int *v2;
};
//SIG(1 BFu0s_BFu7s_Ip) C1{ Fs:0 Fs:7 Fp}



static void Test_BFu0s_BFu7s_Ip()
{
  {
    init_simple_test("BFu0s_BFu7s_Ip");
    static STRUCT_IF_C BFu0s_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_Ip, BFu0s_BFu7s_Ip)
//============================================================================


struct  BFu0s_BFu7s_L  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu7s_L) C1{ Fs:0 Fs:7 FL}



static void Test_BFu0s_BFu7s_L()
{
  {
    init_simple_test("BFu0s_BFu7s_L");
    static STRUCT_IF_C BFu0s_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_L, BFu0s_BFu7s_L)
//============================================================================


struct  BFu0s_BFu7s_S  {
  unsigned short  :0;
  unsigned short v1:7;
  short v2;
};
//SIG(1 BFu0s_BFu7s_S) C1{ Fs:0 Fs:7 Fs}



static void Test_BFu0s_BFu7s_S()
{
  {
    init_simple_test("BFu0s_BFu7s_S");
    static STRUCT_IF_C BFu0s_BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu7s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_S, BFu0s_BFu7s_S)
//============================================================================


struct  BFu0s_BFu7s_Uc  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu7s_Uc) C1{ Fs:0 Fs:7 Fc}



static void Test_BFu0s_BFu7s_Uc()
{
  {
    init_simple_test("BFu0s_BFu7s_Uc");
    static STRUCT_IF_C BFu0s_BFu7s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu7s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_Uc, BFu0s_BFu7s_Uc)
//============================================================================


struct  BFu0s_BFu7s_Ui  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu7s_Ui) C1{ Fs:0 Fs:7 Fi}



static void Test_BFu0s_BFu7s_Ui()
{
  {
    init_simple_test("BFu0s_BFu7s_Ui");
    static STRUCT_IF_C BFu0s_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu7s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_Ui, BFu0s_BFu7s_Ui)
//============================================================================


struct  BFu0s_BFu7s_Ul  {
  unsigned short  :0;
  unsigned short v1:7;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu7s_Ul) C1{ Fs:0 Fs:7 FL}



static void Test_BFu0s_BFu7s_Ul()
{
  {
    init_simple_test("BFu0s_BFu7s_Ul");
    static STRUCT_IF_C BFu0s_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_Ul, BFu0s_BFu7s_Ul)
//============================================================================


struct  BFu0s_BFu7s_Us  {
  unsigned short  :0;
  unsigned short v1:7;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu7s_Us) C1{ Fs:0 Fs:7 Fs}



static void Test_BFu0s_BFu7s_Us()
{
  {
    init_simple_test("BFu0s_BFu7s_Us");
    static STRUCT_IF_C BFu0s_BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu7s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_Us, BFu0s_BFu7s_Us)
//============================================================================


struct  BFu0s_BFu7s_Vp  {
  unsigned short  :0;
  unsigned short v1:7;
  void *v2;
};
//SIG(1 BFu0s_BFu7s_Vp) C1{ Fs:0 Fs:7 Fp}



static void Test_BFu0s_BFu7s_Vp()
{
  {
    init_simple_test("BFu0s_BFu7s_Vp");
    static STRUCT_IF_C BFu0s_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu0s_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu7s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu7s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu7s_Vp, BFu0s_BFu7s_Vp)
//============================================================================


struct  BFu0s_BFu8c  {
  unsigned short  :0;
  unsigned char v1:8;
};
//SIG(1 BFu0s_BFu8c) C1{ Fs:0 Fc:8}



static void Test_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu8c");
    static STRUCT_IF_C BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c, BFu0s_BFu8c)
//============================================================================


struct  BFu0s_BFu8c_BFu0c  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu8c_BFu0c) C1{ Fs:0 Fc:8 Fc:0}



static void Test_BFu0s_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu0c");
    static STRUCT_IF_C BFu0s_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu0c, BFu0s_BFu8c_BFu0c)
//============================================================================


struct  BFu0s_BFu8c_BFu0i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu8c_BFu0i) C1{ Fs:0 Fc:8 Fi:0}



static void Test_BFu0s_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu0i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu0i, BFu0s_BFu8c_BFu0i)
//============================================================================


struct  BFu0s_BFu8c_BFu0ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu8c_BFu0ll) C1{ Fs:0 Fc:8 FL:0}



static void Test_BFu0s_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu0ll, BFu0s_BFu8c_BFu0ll)
//============================================================================


struct  BFu0s_BFu8c_BFu0s  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu8c_BFu0s) C1{ Fs:0 Fc:8 Fs:0}



static void Test_BFu0s_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu0s");
    static STRUCT_IF_C BFu0s_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu0s, BFu0s_BFu8c_BFu0s)
//============================================================================


struct  BFu0s_BFu8c_BFu15i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu8c_BFu15i) C1{ Fs:0 Fc:8 Fi:15}



static void Test_BFu0s_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu15i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu15i, BFu0s_BFu8c_BFu15i)
//============================================================================


struct  BFu0s_BFu8c_BFu15ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu8c_BFu15ll) C1{ Fs:0 Fc:8 FL:15}



static void Test_BFu0s_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu15ll, BFu0s_BFu8c_BFu15ll)
//============================================================================


struct  BFu0s_BFu8c_BFu15s  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu8c_BFu15s) C1{ Fs:0 Fc:8 Fs:15}



static void Test_BFu0s_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu15s");
    static STRUCT_IF_C BFu0s_BFu8c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu15s, BFu0s_BFu8c_BFu15s)
//============================================================================


struct  BFu0s_BFu8c_BFu16i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu8c_BFu16i) C1{ Fs:0 Fc:8 Fi:16}



static void Test_BFu0s_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu16i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu16i, BFu0s_BFu8c_BFu16i)
//============================================================================


struct  BFu0s_BFu8c_BFu16ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu8c_BFu16ll) C1{ Fs:0 Fc:8 FL:16}



static void Test_BFu0s_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu16ll, BFu0s_BFu8c_BFu16ll)
//============================================================================


struct  BFu0s_BFu8c_BFu16s  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu8c_BFu16s) C1{ Fs:0 Fc:8 Fs:16}



static void Test_BFu0s_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu16s");
    static STRUCT_IF_C BFu0s_BFu8c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu16s, BFu0s_BFu8c_BFu16s)
//============================================================================


struct  BFu0s_BFu8c_BFu17i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu8c_BFu17i) C1{ Fs:0 Fc:8 Fi:17}



static void Test_BFu0s_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu17i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu17i, BFu0s_BFu8c_BFu17i)
//============================================================================


struct  BFu0s_BFu8c_BFu17ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu8c_BFu17ll) C1{ Fs:0 Fc:8 FL:17}



static void Test_BFu0s_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu17ll, BFu0s_BFu8c_BFu17ll)
//============================================================================


struct  BFu0s_BFu8c_BFu1c  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu8c_BFu1c) C1{ Fs:0 Fc:8 Fc:1}



static void Test_BFu0s_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu1c");
    static STRUCT_IF_C BFu0s_BFu8c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu1c, BFu0s_BFu8c_BFu1c)
//============================================================================


struct  BFu0s_BFu8c_BFu1i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu8c_BFu1i) C1{ Fs:0 Fc:8 Fi:1}



static void Test_BFu0s_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu1i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu1i, BFu0s_BFu8c_BFu1i)
//============================================================================


struct  BFu0s_BFu8c_BFu1ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu8c_BFu1ll) C1{ Fs:0 Fc:8 FL:1}



static void Test_BFu0s_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu1ll, BFu0s_BFu8c_BFu1ll)
//============================================================================


struct  BFu0s_BFu8c_BFu1s  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu8c_BFu1s) C1{ Fs:0 Fc:8 Fs:1}



static void Test_BFu0s_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu1s");
    static STRUCT_IF_C BFu0s_BFu8c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu1s, BFu0s_BFu8c_BFu1s)
//============================================================================


struct  BFu0s_BFu8c_BFu31i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu8c_BFu31i) C1{ Fs:0 Fc:8 Fi:31}



static void Test_BFu0s_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu31i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu31i, BFu0s_BFu8c_BFu31i)
//============================================================================


struct  BFu0s_BFu8c_BFu31ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu8c_BFu31ll) C1{ Fs:0 Fc:8 FL:31}



static void Test_BFu0s_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu31ll, BFu0s_BFu8c_BFu31ll)
//============================================================================


struct  BFu0s_BFu8c_BFu32i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu8c_BFu32i) C1{ Fs:0 Fc:8 Fi:32}



static void Test_BFu0s_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu32i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu32i, BFu0s_BFu8c_BFu32i)
//============================================================================


struct  BFu0s_BFu8c_BFu32ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu8c_BFu32ll) C1{ Fs:0 Fc:8 FL:32}



static void Test_BFu0s_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu32ll, BFu0s_BFu8c_BFu32ll)
//============================================================================


struct  BFu0s_BFu8c_BFu33  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu8c_BFu33) C1{ Fs:0 Fc:8 FL:33}



static void Test_BFu0s_BFu8c_BFu33()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu33");
    static STRUCT_IF_C BFu0s_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0s_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu33, BFu0s_BFu8c_BFu33)
//============================================================================


struct  BFu0s_BFu8c_BFu7c  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu8c_BFu7c) C1{ Fs:0 Fc:8 Fc:7}



static void Test_BFu0s_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu7c");
    static STRUCT_IF_C BFu0s_BFu8c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu7c, BFu0s_BFu8c_BFu7c)
//============================================================================


struct  BFu0s_BFu8c_BFu7i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu8c_BFu7i) C1{ Fs:0 Fc:8 Fi:7}



static void Test_BFu0s_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu7i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu7i, BFu0s_BFu8c_BFu7i)
//============================================================================


struct  BFu0s_BFu8c_BFu7ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu8c_BFu7ll) C1{ Fs:0 Fc:8 FL:7}



static void Test_BFu0s_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu7ll, BFu0s_BFu8c_BFu7ll)
//============================================================================


struct  BFu0s_BFu8c_BFu7s  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu8c_BFu7s) C1{ Fs:0 Fc:8 Fs:7}



static void Test_BFu0s_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu7s");
    static STRUCT_IF_C BFu0s_BFu8c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu7s, BFu0s_BFu8c_BFu7s)
//============================================================================


struct  BFu0s_BFu8c_BFu8c  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu8c_BFu8c) C1{ Fs:0 Fc:8 Fc:8}



static void Test_BFu0s_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu8c");
    static STRUCT_IF_C BFu0s_BFu8c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu8c, BFu0s_BFu8c_BFu8c)
//============================================================================


struct  BFu0s_BFu8c_BFu8i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu8c_BFu8i) C1{ Fs:0 Fc:8 Fi:8}



static void Test_BFu0s_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu8i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu8i, BFu0s_BFu8c_BFu8i)
//============================================================================


struct  BFu0s_BFu8c_BFu8ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu8c_BFu8ll) C1{ Fs:0 Fc:8 FL:8}



static void Test_BFu0s_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu8ll, BFu0s_BFu8c_BFu8ll)
//============================================================================


struct  BFu0s_BFu8c_BFu8s  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu8c_BFu8s) C1{ Fs:0 Fc:8 Fs:8}



static void Test_BFu0s_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu8s");
    static STRUCT_IF_C BFu0s_BFu8c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu8s, BFu0s_BFu8c_BFu8s)
//============================================================================


struct  BFu0s_BFu8c_BFu9i  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu8c_BFu9i) C1{ Fs:0 Fc:8 Fi:9}



static void Test_BFu0s_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu9i");
    static STRUCT_IF_C BFu0s_BFu8c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0s_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu9i, BFu0s_BFu8c_BFu9i)
//============================================================================


struct  BFu0s_BFu8c_BFu9ll  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu8c_BFu9ll) C1{ Fs:0 Fc:8 FL:9}



static void Test_BFu0s_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu9ll, BFu0s_BFu8c_BFu9ll)
//============================================================================


struct  BFu0s_BFu8c_BFu9s  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu8c_BFu9s) C1{ Fs:0 Fc:8 Fs:9}



static void Test_BFu0s_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu8c_BFu9s");
    static STRUCT_IF_C BFu0s_BFu8c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_BFu9s, BFu0s_BFu8c_BFu9s)
//============================================================================


struct  BFu0s_BFu8c_C  {
  unsigned short  :0;
  unsigned char v1:8;
  char v2;
};
//SIG(1 BFu0s_BFu8c_C) C1{ Fs:0 Fc:8 Fc}



static void Test_BFu0s_BFu8c_C()
{
  {
    init_simple_test("BFu0s_BFu8c_C");
    static STRUCT_IF_C BFu0s_BFu8c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu8c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_C, BFu0s_BFu8c_C)
//============================================================================


struct  BFu0s_BFu8c_D  {
  unsigned short  :0;
  unsigned char v1:8;
  double v2;
};
//SIG(1 BFu0s_BFu8c_D) C1{ Fs:0 Fc:8 FL}



static void Test_BFu0s_BFu8c_D()
{
  {
    init_simple_test("BFu0s_BFu8c_D");
    static STRUCT_IF_C BFu0s_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_D, BFu0s_BFu8c_D)
//============================================================================


struct  BFu0s_BFu8c_F  {
  unsigned short  :0;
  unsigned char v1:8;
  float v2;
};
//SIG(1 BFu0s_BFu8c_F) C1{ Fs:0 Fc:8 Fi}



static void Test_BFu0s_BFu8c_F()
{
  {
    init_simple_test("BFu0s_BFu8c_F");
    static STRUCT_IF_C BFu0s_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_F, BFu0s_BFu8c_F)
//============================================================================


struct  BFu0s_BFu8c_I  {
  unsigned short  :0;
  unsigned char v1:8;
  int v2;
};
//SIG(1 BFu0s_BFu8c_I) C1{ Fs:0 Fc:8 Fi}



static void Test_BFu0s_BFu8c_I()
{
  {
    init_simple_test("BFu0s_BFu8c_I");
    static STRUCT_IF_C BFu0s_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_I, BFu0s_BFu8c_I)
//============================================================================


struct  BFu0s_BFu8c_Ip  {
  unsigned short  :0;
  unsigned char v1:8;
  int *v2;
};
//SIG(1 BFu0s_BFu8c_Ip) C1{ Fs:0 Fc:8 Fp}



static void Test_BFu0s_BFu8c_Ip()
{
  {
    init_simple_test("BFu0s_BFu8c_Ip");
    static STRUCT_IF_C BFu0s_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_Ip, BFu0s_BFu8c_Ip)
//============================================================================


struct  BFu0s_BFu8c_L  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu8c_L) C1{ Fs:0 Fc:8 FL}



static void Test_BFu0s_BFu8c_L()
{
  {
    init_simple_test("BFu0s_BFu8c_L");
    static STRUCT_IF_C BFu0s_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_L, BFu0s_BFu8c_L)
//============================================================================


struct  BFu0s_BFu8c_S  {
  unsigned short  :0;
  unsigned char v1:8;
  short v2;
};
//SIG(1 BFu0s_BFu8c_S) C1{ Fs:0 Fc:8 Fs}



static void Test_BFu0s_BFu8c_S()
{
  {
    init_simple_test("BFu0s_BFu8c_S");
    static STRUCT_IF_C BFu0s_BFu8c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu8c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_S, BFu0s_BFu8c_S)
//============================================================================


struct  BFu0s_BFu8c_Uc  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu8c_Uc) C1{ Fs:0 Fc:8 Fc}



static void Test_BFu0s_BFu8c_Uc()
{
  {
    init_simple_test("BFu0s_BFu8c_Uc");
    static STRUCT_IF_C BFu0s_BFu8c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8c_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu8c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_Uc, BFu0s_BFu8c_Uc)
//============================================================================


struct  BFu0s_BFu8c_Ui  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu8c_Ui) C1{ Fs:0 Fc:8 Fi}



static void Test_BFu0s_BFu8c_Ui()
{
  {
    init_simple_test("BFu0s_BFu8c_Ui");
    static STRUCT_IF_C BFu0s_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_Ui, BFu0s_BFu8c_Ui)
//============================================================================


struct  BFu0s_BFu8c_Ul  {
  unsigned short  :0;
  unsigned char v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu8c_Ul) C1{ Fs:0 Fc:8 FL}



static void Test_BFu0s_BFu8c_Ul()
{
  {
    init_simple_test("BFu0s_BFu8c_Ul");
    static STRUCT_IF_C BFu0s_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_Ul, BFu0s_BFu8c_Ul)
//============================================================================


struct  BFu0s_BFu8c_Us  {
  unsigned short  :0;
  unsigned char v1:8;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu8c_Us) C1{ Fs:0 Fc:8 Fs}



static void Test_BFu0s_BFu8c_Us()
{
  {
    init_simple_test("BFu0s_BFu8c_Us");
    static STRUCT_IF_C BFu0s_BFu8c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu8c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_Us, BFu0s_BFu8c_Us)
//============================================================================


struct  BFu0s_BFu8c_Vp  {
  unsigned short  :0;
  unsigned char v1:8;
  void *v2;
};
//SIG(1 BFu0s_BFu8c_Vp) C1{ Fs:0 Fc:8 Fp}



static void Test_BFu0s_BFu8c_Vp()
{
  {
    init_simple_test("BFu0s_BFu8c_Vp");
    static STRUCT_IF_C BFu0s_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8c_Vp, BFu0s_BFu8c_Vp)
//============================================================================


struct  BFu0s_BFu8i  {
  unsigned short  :0;
  unsigned int v1:8;
};
//SIG(1 BFu0s_BFu8i) C1{ Fs:0 Fi:8}



static void Test_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu8i");
    static STRUCT_IF_C BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i, BFu0s_BFu8i)
//============================================================================


struct  BFu0s_BFu8i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu8i_BFu0c) C1{ Fs:0 Fi:8 Fc:0}



static void Test_BFu0s_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu0c, BFu0s_BFu8i_BFu0c)
//============================================================================


struct  BFu0s_BFu8i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu8i_BFu0i) C1{ Fs:0 Fi:8 Fi:0}



static void Test_BFu0s_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu0i, BFu0s_BFu8i_BFu0i)
//============================================================================


struct  BFu0s_BFu8i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu8i_BFu0ll) C1{ Fs:0 Fi:8 FL:0}



static void Test_BFu0s_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu0ll, BFu0s_BFu8i_BFu0ll)
//============================================================================


struct  BFu0s_BFu8i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu8i_BFu0s) C1{ Fs:0 Fi:8 Fs:0}



static void Test_BFu0s_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu0s, BFu0s_BFu8i_BFu0s)
//============================================================================


struct  BFu0s_BFu8i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu8i_BFu15i) C1{ Fs:0 Fi:8 Fi:15}



static void Test_BFu0s_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu15i, BFu0s_BFu8i_BFu15i)
//============================================================================


struct  BFu0s_BFu8i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu8i_BFu15ll) C1{ Fs:0 Fi:8 FL:15}



static void Test_BFu0s_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu15ll, BFu0s_BFu8i_BFu15ll)
//============================================================================


struct  BFu0s_BFu8i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu8i_BFu15s) C1{ Fs:0 Fi:8 Fs:15}



static void Test_BFu0s_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu8i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu15s, BFu0s_BFu8i_BFu15s)
//============================================================================


struct  BFu0s_BFu8i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu8i_BFu16i) C1{ Fs:0 Fi:8 Fi:16}



static void Test_BFu0s_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu16i, BFu0s_BFu8i_BFu16i)
//============================================================================


struct  BFu0s_BFu8i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu8i_BFu16ll) C1{ Fs:0 Fi:8 FL:16}



static void Test_BFu0s_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu16ll, BFu0s_BFu8i_BFu16ll)
//============================================================================


struct  BFu0s_BFu8i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu8i_BFu16s) C1{ Fs:0 Fi:8 Fs:16}



static void Test_BFu0s_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu8i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu16s, BFu0s_BFu8i_BFu16s)
//============================================================================


struct  BFu0s_BFu8i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu8i_BFu17i) C1{ Fs:0 Fi:8 Fi:17}



static void Test_BFu0s_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu17i, BFu0s_BFu8i_BFu17i)
//============================================================================


struct  BFu0s_BFu8i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu8i_BFu17ll) C1{ Fs:0 Fi:8 FL:17}



static void Test_BFu0s_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu17ll, BFu0s_BFu8i_BFu17ll)
//============================================================================


struct  BFu0s_BFu8i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu8i_BFu1c) C1{ Fs:0 Fi:8 Fc:1}



static void Test_BFu0s_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu1c, BFu0s_BFu8i_BFu1c)
//============================================================================


struct  BFu0s_BFu8i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu8i_BFu1i) C1{ Fs:0 Fi:8 Fi:1}



static void Test_BFu0s_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu1i, BFu0s_BFu8i_BFu1i)
//============================================================================


struct  BFu0s_BFu8i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu8i_BFu1ll) C1{ Fs:0 Fi:8 FL:1}



static void Test_BFu0s_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu1ll, BFu0s_BFu8i_BFu1ll)
//============================================================================


struct  BFu0s_BFu8i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu8i_BFu1s) C1{ Fs:0 Fi:8 Fs:1}



static void Test_BFu0s_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu1s, BFu0s_BFu8i_BFu1s)
//============================================================================


struct  BFu0s_BFu8i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu8i_BFu31i) C1{ Fs:0 Fi:8 Fi:31}



static void Test_BFu0s_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu31i, BFu0s_BFu8i_BFu31i)
//============================================================================


struct  BFu0s_BFu8i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu8i_BFu31ll) C1{ Fs:0 Fi:8 FL:31}



static void Test_BFu0s_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu31ll, BFu0s_BFu8i_BFu31ll)
//============================================================================


struct  BFu0s_BFu8i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu8i_BFu32i) C1{ Fs:0 Fi:8 Fi:32}



static void Test_BFu0s_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu32i, BFu0s_BFu8i_BFu32i)
//============================================================================


struct  BFu0s_BFu8i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu8i_BFu32ll) C1{ Fs:0 Fi:8 FL:32}



static void Test_BFu0s_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu32ll, BFu0s_BFu8i_BFu32ll)
//============================================================================


struct  BFu0s_BFu8i_BFu33  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu8i_BFu33) C1{ Fs:0 Fi:8 FL:33}



static void Test_BFu0s_BFu8i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu33");
    static STRUCT_IF_C BFu0s_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0s_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu33, BFu0s_BFu8i_BFu33)
//============================================================================


struct  BFu0s_BFu8i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu8i_BFu7c) C1{ Fs:0 Fi:8 Fc:7}



static void Test_BFu0s_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu7c, BFu0s_BFu8i_BFu7c)
//============================================================================


struct  BFu0s_BFu8i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu8i_BFu7i) C1{ Fs:0 Fi:8 Fi:7}



static void Test_BFu0s_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu7i, BFu0s_BFu8i_BFu7i)
//============================================================================


struct  BFu0s_BFu8i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu8i_BFu7ll) C1{ Fs:0 Fi:8 FL:7}



static void Test_BFu0s_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu7ll, BFu0s_BFu8i_BFu7ll)
//============================================================================


struct  BFu0s_BFu8i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu8i_BFu7s) C1{ Fs:0 Fi:8 Fs:7}



static void Test_BFu0s_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu7s, BFu0s_BFu8i_BFu7s)
//============================================================================


struct  BFu0s_BFu8i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu8i_BFu8c) C1{ Fs:0 Fi:8 Fc:8}



static void Test_BFu0s_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu8c, BFu0s_BFu8i_BFu8c)
//============================================================================


struct  BFu0s_BFu8i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu8i_BFu8i) C1{ Fs:0 Fi:8 Fi:8}



static void Test_BFu0s_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu8i, BFu0s_BFu8i_BFu8i)
//============================================================================


struct  BFu0s_BFu8i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu8i_BFu8ll) C1{ Fs:0 Fi:8 FL:8}



static void Test_BFu0s_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu8ll, BFu0s_BFu8i_BFu8ll)
//============================================================================


struct  BFu0s_BFu8i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu8i_BFu8s) C1{ Fs:0 Fi:8 Fs:8}



static void Test_BFu0s_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu8s, BFu0s_BFu8i_BFu8s)
//============================================================================


struct  BFu0s_BFu8i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu8i_BFu9i) C1{ Fs:0 Fi:8 Fi:9}



static void Test_BFu0s_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0s_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu9i, BFu0s_BFu8i_BFu9i)
//============================================================================


struct  BFu0s_BFu8i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu8i_BFu9ll) C1{ Fs:0 Fi:8 FL:9}



static void Test_BFu0s_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu9ll, BFu0s_BFu8i_BFu9ll)
//============================================================================


struct  BFu0s_BFu8i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu8i_BFu9s) C1{ Fs:0 Fi:8 Fs:9}



static void Test_BFu0s_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu8i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_BFu9s, BFu0s_BFu8i_BFu9s)
//============================================================================


struct  BFu0s_BFu8i_C  {
  unsigned short  :0;
  unsigned int v1:8;
  char v2;
};
//SIG(1 BFu0s_BFu8i_C) C1{ Fs:0 Fi:8 Fc}



static void Test_BFu0s_BFu8i_C()
{
  {
    init_simple_test("BFu0s_BFu8i_C");
    static STRUCT_IF_C BFu0s_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu8i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_C, BFu0s_BFu8i_C)
//============================================================================


struct  BFu0s_BFu8i_D  {
  unsigned short  :0;
  unsigned int v1:8;
  double v2;
};
//SIG(1 BFu0s_BFu8i_D) C1{ Fs:0 Fi:8 FL}



static void Test_BFu0s_BFu8i_D()
{
  {
    init_simple_test("BFu0s_BFu8i_D");
    static STRUCT_IF_C BFu0s_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_D, BFu0s_BFu8i_D)
//============================================================================


struct  BFu0s_BFu8i_F  {
  unsigned short  :0;
  unsigned int v1:8;
  float v2;
};
//SIG(1 BFu0s_BFu8i_F) C1{ Fs:0 Fi:8 Fi}



static void Test_BFu0s_BFu8i_F()
{
  {
    init_simple_test("BFu0s_BFu8i_F");
    static STRUCT_IF_C BFu0s_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_F, BFu0s_BFu8i_F)
//============================================================================


struct  BFu0s_BFu8i_I  {
  unsigned short  :0;
  unsigned int v1:8;
  int v2;
};
//SIG(1 BFu0s_BFu8i_I) C1{ Fs:0 Fi:8 Fi}



static void Test_BFu0s_BFu8i_I()
{
  {
    init_simple_test("BFu0s_BFu8i_I");
    static STRUCT_IF_C BFu0s_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_I, BFu0s_BFu8i_I)
//============================================================================


struct  BFu0s_BFu8i_Ip  {
  unsigned short  :0;
  unsigned int v1:8;
  int *v2;
};
//SIG(1 BFu0s_BFu8i_Ip) C1{ Fs:0 Fi:8 Fp}



static void Test_BFu0s_BFu8i_Ip()
{
  {
    init_simple_test("BFu0s_BFu8i_Ip");
    static STRUCT_IF_C BFu0s_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_Ip, BFu0s_BFu8i_Ip)
//============================================================================


struct  BFu0s_BFu8i_L  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu8i_L) C1{ Fs:0 Fi:8 FL}



static void Test_BFu0s_BFu8i_L()
{
  {
    init_simple_test("BFu0s_BFu8i_L");
    static STRUCT_IF_C BFu0s_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_L, BFu0s_BFu8i_L)
//============================================================================


struct  BFu0s_BFu8i_S  {
  unsigned short  :0;
  unsigned int v1:8;
  short v2;
};
//SIG(1 BFu0s_BFu8i_S) C1{ Fs:0 Fi:8 Fs}



static void Test_BFu0s_BFu8i_S()
{
  {
    init_simple_test("BFu0s_BFu8i_S");
    static STRUCT_IF_C BFu0s_BFu8i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu8i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_S, BFu0s_BFu8i_S)
//============================================================================


struct  BFu0s_BFu8i_Uc  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu8i_Uc) C1{ Fs:0 Fi:8 Fc}



static void Test_BFu0s_BFu8i_Uc()
{
  {
    init_simple_test("BFu0s_BFu8i_Uc");
    static STRUCT_IF_C BFu0s_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu8i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_Uc, BFu0s_BFu8i_Uc)
//============================================================================


struct  BFu0s_BFu8i_Ui  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu8i_Ui) C1{ Fs:0 Fi:8 Fi}



static void Test_BFu0s_BFu8i_Ui()
{
  {
    init_simple_test("BFu0s_BFu8i_Ui");
    static STRUCT_IF_C BFu0s_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_Ui, BFu0s_BFu8i_Ui)
//============================================================================


struct  BFu0s_BFu8i_Ul  {
  unsigned short  :0;
  unsigned int v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu8i_Ul) C1{ Fs:0 Fi:8 FL}



static void Test_BFu0s_BFu8i_Ul()
{
  {
    init_simple_test("BFu0s_BFu8i_Ul");
    static STRUCT_IF_C BFu0s_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_Ul, BFu0s_BFu8i_Ul)
//============================================================================


struct  BFu0s_BFu8i_Us  {
  unsigned short  :0;
  unsigned int v1:8;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu8i_Us) C1{ Fs:0 Fi:8 Fs}



static void Test_BFu0s_BFu8i_Us()
{
  {
    init_simple_test("BFu0s_BFu8i_Us");
    static STRUCT_IF_C BFu0s_BFu8i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu8i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_Us, BFu0s_BFu8i_Us)
//============================================================================


struct  BFu0s_BFu8i_Vp  {
  unsigned short  :0;
  unsigned int v1:8;
  void *v2;
};
//SIG(1 BFu0s_BFu8i_Vp) C1{ Fs:0 Fi:8 Fp}



static void Test_BFu0s_BFu8i_Vp()
{
  {
    init_simple_test("BFu0s_BFu8i_Vp");
    static STRUCT_IF_C BFu0s_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8i_Vp, BFu0s_BFu8i_Vp)
//============================================================================


struct  BFu0s_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:8;
};
//SIG(1 BFu0s_BFu8ll) C1{ Fs:0 FL:8}



static void Test_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll, BFu0s_BFu8ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu8ll_BFu0c) C1{ Fs:0 FL:8 Fc:0}



static void Test_BFu0s_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu0c, BFu0s_BFu8ll_BFu0c)
//============================================================================


struct  BFu0s_BFu8ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu8ll_BFu0i) C1{ Fs:0 FL:8 Fi:0}



static void Test_BFu0s_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu0i, BFu0s_BFu8ll_BFu0i)
//============================================================================


struct  BFu0s_BFu8ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu8ll_BFu0ll) C1{ Fs:0 FL:8 FL:0}



static void Test_BFu0s_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu0ll, BFu0s_BFu8ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu8ll_BFu0s) C1{ Fs:0 FL:8 Fs:0}



static void Test_BFu0s_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu0s, BFu0s_BFu8ll_BFu0s)
//============================================================================


struct  BFu0s_BFu8ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu8ll_BFu15i) C1{ Fs:0 FL:8 Fi:15}



static void Test_BFu0s_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu15i, BFu0s_BFu8ll_BFu15i)
//============================================================================


struct  BFu0s_BFu8ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu8ll_BFu15ll) C1{ Fs:0 FL:8 FL:15}



static void Test_BFu0s_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu15ll, BFu0s_BFu8ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu8ll_BFu15s) C1{ Fs:0 FL:8 Fs:15}



static void Test_BFu0s_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu15s, BFu0s_BFu8ll_BFu15s)
//============================================================================


struct  BFu0s_BFu8ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu8ll_BFu16i) C1{ Fs:0 FL:8 Fi:16}



static void Test_BFu0s_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu16i, BFu0s_BFu8ll_BFu16i)
//============================================================================


struct  BFu0s_BFu8ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu8ll_BFu16ll) C1{ Fs:0 FL:8 FL:16}



static void Test_BFu0s_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu16ll, BFu0s_BFu8ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu8ll_BFu16s) C1{ Fs:0 FL:8 Fs:16}



static void Test_BFu0s_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu16s, BFu0s_BFu8ll_BFu16s)
//============================================================================


struct  BFu0s_BFu8ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu8ll_BFu17i) C1{ Fs:0 FL:8 Fi:17}



static void Test_BFu0s_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu17i, BFu0s_BFu8ll_BFu17i)
//============================================================================


struct  BFu0s_BFu8ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu8ll_BFu17ll) C1{ Fs:0 FL:8 FL:17}



static void Test_BFu0s_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu17ll, BFu0s_BFu8ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu8ll_BFu1c) C1{ Fs:0 FL:8 Fc:1}



static void Test_BFu0s_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu1c, BFu0s_BFu8ll_BFu1c)
//============================================================================


struct  BFu0s_BFu8ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu8ll_BFu1i) C1{ Fs:0 FL:8 Fi:1}



static void Test_BFu0s_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu1i, BFu0s_BFu8ll_BFu1i)
//============================================================================


struct  BFu0s_BFu8ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu8ll_BFu1ll) C1{ Fs:0 FL:8 FL:1}



static void Test_BFu0s_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu1ll, BFu0s_BFu8ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu8ll_BFu1s) C1{ Fs:0 FL:8 Fs:1}



static void Test_BFu0s_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu1s, BFu0s_BFu8ll_BFu1s)
//============================================================================


struct  BFu0s_BFu8ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu8ll_BFu31i) C1{ Fs:0 FL:8 Fi:31}



static void Test_BFu0s_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu31i, BFu0s_BFu8ll_BFu31i)
//============================================================================


struct  BFu0s_BFu8ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu8ll_BFu31ll) C1{ Fs:0 FL:8 FL:31}



static void Test_BFu0s_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu31ll, BFu0s_BFu8ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu8ll_BFu32i) C1{ Fs:0 FL:8 Fi:32}



static void Test_BFu0s_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu32i, BFu0s_BFu8ll_BFu32i)
//============================================================================


struct  BFu0s_BFu8ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu8ll_BFu32ll) C1{ Fs:0 FL:8 FL:32}



static void Test_BFu0s_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu32ll, BFu0s_BFu8ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu8ll_BFu33) C1{ Fs:0 FL:8 FL:33}



static void Test_BFu0s_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0s_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu33, BFu0s_BFu8ll_BFu33)
//============================================================================


struct  BFu0s_BFu8ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu8ll_BFu7c) C1{ Fs:0 FL:8 Fc:7}



static void Test_BFu0s_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu7c, BFu0s_BFu8ll_BFu7c)
//============================================================================


struct  BFu0s_BFu8ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu8ll_BFu7i) C1{ Fs:0 FL:8 Fi:7}



static void Test_BFu0s_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu7i, BFu0s_BFu8ll_BFu7i)
//============================================================================


struct  BFu0s_BFu8ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu8ll_BFu7ll) C1{ Fs:0 FL:8 FL:7}



static void Test_BFu0s_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu7ll, BFu0s_BFu8ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu8ll_BFu7s) C1{ Fs:0 FL:8 Fs:7}



static void Test_BFu0s_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu7s, BFu0s_BFu8ll_BFu7s)
//============================================================================


struct  BFu0s_BFu8ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu8ll_BFu8c) C1{ Fs:0 FL:8 Fc:8}



static void Test_BFu0s_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu8c, BFu0s_BFu8ll_BFu8c)
//============================================================================


struct  BFu0s_BFu8ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu8ll_BFu8i) C1{ Fs:0 FL:8 Fi:8}



static void Test_BFu0s_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu8i, BFu0s_BFu8ll_BFu8i)
//============================================================================


struct  BFu0s_BFu8ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu8ll_BFu8ll) C1{ Fs:0 FL:8 FL:8}



static void Test_BFu0s_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu8ll, BFu0s_BFu8ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu8ll_BFu8s) C1{ Fs:0 FL:8 Fs:8}



static void Test_BFu0s_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu8s, BFu0s_BFu8ll_BFu8s)
//============================================================================


struct  BFu0s_BFu8ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu8ll_BFu9i) C1{ Fs:0 FL:8 Fi:9}



static void Test_BFu0s_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu9i, BFu0s_BFu8ll_BFu9i)
//============================================================================


struct  BFu0s_BFu8ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu8ll_BFu9ll) C1{ Fs:0 FL:8 FL:9}



static void Test_BFu0s_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu9ll, BFu0s_BFu8ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu8ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu8ll_BFu9s) C1{ Fs:0 FL:8 Fs:9}



static void Test_BFu0s_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_BFu9s, BFu0s_BFu8ll_BFu9s)
//============================================================================


struct  BFu0s_BFu8ll_C  {
  unsigned short  :0;
  __tsu64 v1:8;
  char v2;
};
//SIG(1 BFu0s_BFu8ll_C) C1{ Fs:0 FL:8 Fc}



static void Test_BFu0s_BFu8ll_C()
{
  {
    init_simple_test("BFu0s_BFu8ll_C");
    static STRUCT_IF_C BFu0s_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu8ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_C, BFu0s_BFu8ll_C)
//============================================================================


struct  BFu0s_BFu8ll_D  {
  unsigned short  :0;
  __tsu64 v1:8;
  double v2;
};
//SIG(1 BFu0s_BFu8ll_D) C1{ Fs:0 FL:8 FL}



static void Test_BFu0s_BFu8ll_D()
{
  {
    init_simple_test("BFu0s_BFu8ll_D");
    static STRUCT_IF_C BFu0s_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_D, BFu0s_BFu8ll_D)
//============================================================================


struct  BFu0s_BFu8ll_F  {
  unsigned short  :0;
  __tsu64 v1:8;
  float v2;
};
//SIG(1 BFu0s_BFu8ll_F) C1{ Fs:0 FL:8 Fi}



static void Test_BFu0s_BFu8ll_F()
{
  {
    init_simple_test("BFu0s_BFu8ll_F");
    static STRUCT_IF_C BFu0s_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_F, BFu0s_BFu8ll_F)
//============================================================================


struct  BFu0s_BFu8ll_I  {
  unsigned short  :0;
  __tsu64 v1:8;
  int v2;
};
//SIG(1 BFu0s_BFu8ll_I) C1{ Fs:0 FL:8 Fi}



static void Test_BFu0s_BFu8ll_I()
{
  {
    init_simple_test("BFu0s_BFu8ll_I");
    static STRUCT_IF_C BFu0s_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_I, BFu0s_BFu8ll_I)
//============================================================================


struct  BFu0s_BFu8ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:8;
  int *v2;
};
//SIG(1 BFu0s_BFu8ll_Ip) C1{ Fs:0 FL:8 Fp}



static void Test_BFu0s_BFu8ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu8ll_Ip");
    static STRUCT_IF_C BFu0s_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_Ip, BFu0s_BFu8ll_Ip)
//============================================================================


struct  BFu0s_BFu8ll_L  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu8ll_L) C1{ Fs:0 FL:8 FL}



static void Test_BFu0s_BFu8ll_L()
{
  {
    init_simple_test("BFu0s_BFu8ll_L");
    static STRUCT_IF_C BFu0s_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_L, BFu0s_BFu8ll_L)
//============================================================================


struct  BFu0s_BFu8ll_S  {
  unsigned short  :0;
  __tsu64 v1:8;
  short v2;
};
//SIG(1 BFu0s_BFu8ll_S) C1{ Fs:0 FL:8 Fs}



static void Test_BFu0s_BFu8ll_S()
{
  {
    init_simple_test("BFu0s_BFu8ll_S");
    static STRUCT_IF_C BFu0s_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu8ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_S, BFu0s_BFu8ll_S)
//============================================================================


struct  BFu0s_BFu8ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu8ll_Uc) C1{ Fs:0 FL:8 Fc}



static void Test_BFu0s_BFu8ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu8ll_Uc");
    static STRUCT_IF_C BFu0s_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu8ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_Uc, BFu0s_BFu8ll_Uc)
//============================================================================


struct  BFu0s_BFu8ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu8ll_Ui) C1{ Fs:0 FL:8 Fi}



static void Test_BFu0s_BFu8ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu8ll_Ui");
    static STRUCT_IF_C BFu0s_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_Ui, BFu0s_BFu8ll_Ui)
//============================================================================


struct  BFu0s_BFu8ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu8ll_Ul) C1{ Fs:0 FL:8 FL}



static void Test_BFu0s_BFu8ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu8ll_Ul");
    static STRUCT_IF_C BFu0s_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_Ul, BFu0s_BFu8ll_Ul)
//============================================================================


struct  BFu0s_BFu8ll_Us  {
  unsigned short  :0;
  __tsu64 v1:8;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu8ll_Us) C1{ Fs:0 FL:8 Fs}



static void Test_BFu0s_BFu8ll_Us()
{
  {
    init_simple_test("BFu0s_BFu8ll_Us");
    static STRUCT_IF_C BFu0s_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu8ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_Us, BFu0s_BFu8ll_Us)
//============================================================================


struct  BFu0s_BFu8ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:8;
  void *v2;
};
//SIG(1 BFu0s_BFu8ll_Vp) C1{ Fs:0 FL:8 Fp}



static void Test_BFu0s_BFu8ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu8ll_Vp");
    static STRUCT_IF_C BFu0s_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8ll_Vp, BFu0s_BFu8ll_Vp)
//============================================================================


struct  BFu0s_BFu8s  {
  unsigned short  :0;
  unsigned short v1:8;
};
//SIG(1 BFu0s_BFu8s) C1{ Fs:0 Fs:8}



static void Test_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu8s");
    static STRUCT_IF_C BFu0s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s, BFu0s_BFu8s)
//============================================================================


struct  BFu0s_BFu8s_BFu0c  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu8s_BFu0c) C1{ Fs:0 Fs:8 Fc:0}



static void Test_BFu0s_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu0c, BFu0s_BFu8s_BFu0c)
//============================================================================


struct  BFu0s_BFu8s_BFu0i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu8s_BFu0i) C1{ Fs:0 Fs:8 Fi:0}



static void Test_BFu0s_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu0i, BFu0s_BFu8s_BFu0i)
//============================================================================


struct  BFu0s_BFu8s_BFu0ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu8s_BFu0ll) C1{ Fs:0 Fs:8 FL:0}



static void Test_BFu0s_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu0ll, BFu0s_BFu8s_BFu0ll)
//============================================================================


struct  BFu0s_BFu8s_BFu0s  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu8s_BFu0s) C1{ Fs:0 Fs:8 Fs:0}



static void Test_BFu0s_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu0s, BFu0s_BFu8s_BFu0s)
//============================================================================


struct  BFu0s_BFu8s_BFu15i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu8s_BFu15i) C1{ Fs:0 Fs:8 Fi:15}



static void Test_BFu0s_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu15i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu15i, BFu0s_BFu8s_BFu15i)
//============================================================================


struct  BFu0s_BFu8s_BFu15ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu8s_BFu15ll) C1{ Fs:0 Fs:8 FL:15}



static void Test_BFu0s_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu15ll, BFu0s_BFu8s_BFu15ll)
//============================================================================


struct  BFu0s_BFu8s_BFu15s  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu8s_BFu15s) C1{ Fs:0 Fs:8 Fs:15}



static void Test_BFu0s_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu15s");
    static STRUCT_IF_C BFu0s_BFu8s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu15s, BFu0s_BFu8s_BFu15s)
//============================================================================


struct  BFu0s_BFu8s_BFu16i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu8s_BFu16i) C1{ Fs:0 Fs:8 Fi:16}



static void Test_BFu0s_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu16i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu16i, BFu0s_BFu8s_BFu16i)
//============================================================================


struct  BFu0s_BFu8s_BFu16ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu8s_BFu16ll) C1{ Fs:0 Fs:8 FL:16}



static void Test_BFu0s_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu16ll, BFu0s_BFu8s_BFu16ll)
//============================================================================


struct  BFu0s_BFu8s_BFu16s  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu8s_BFu16s) C1{ Fs:0 Fs:8 Fs:16}



static void Test_BFu0s_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu16s");
    static STRUCT_IF_C BFu0s_BFu8s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu16s, BFu0s_BFu8s_BFu16s)
//============================================================================


struct  BFu0s_BFu8s_BFu17i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu8s_BFu17i) C1{ Fs:0 Fs:8 Fi:17}



static void Test_BFu0s_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu17i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu17i, BFu0s_BFu8s_BFu17i)
//============================================================================


struct  BFu0s_BFu8s_BFu17ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu8s_BFu17ll) C1{ Fs:0 Fs:8 FL:17}



static void Test_BFu0s_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu17ll, BFu0s_BFu8s_BFu17ll)
//============================================================================


struct  BFu0s_BFu8s_BFu1c  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu8s_BFu1c) C1{ Fs:0 Fs:8 Fc:1}



static void Test_BFu0s_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu1c");
    static STRUCT_IF_C BFu0s_BFu8s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu1c, BFu0s_BFu8s_BFu1c)
//============================================================================


struct  BFu0s_BFu8s_BFu1i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu8s_BFu1i) C1{ Fs:0 Fs:8 Fi:1}



static void Test_BFu0s_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu1i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu1i, BFu0s_BFu8s_BFu1i)
//============================================================================


struct  BFu0s_BFu8s_BFu1ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu8s_BFu1ll) C1{ Fs:0 Fs:8 FL:1}



static void Test_BFu0s_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu1ll, BFu0s_BFu8s_BFu1ll)
//============================================================================


struct  BFu0s_BFu8s_BFu1s  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu8s_BFu1s) C1{ Fs:0 Fs:8 Fs:1}



static void Test_BFu0s_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu1s");
    static STRUCT_IF_C BFu0s_BFu8s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu1s, BFu0s_BFu8s_BFu1s)
//============================================================================


struct  BFu0s_BFu8s_BFu31i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu8s_BFu31i) C1{ Fs:0 Fs:8 Fi:31}



static void Test_BFu0s_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu31i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu31i, BFu0s_BFu8s_BFu31i)
//============================================================================


struct  BFu0s_BFu8s_BFu31ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu8s_BFu31ll) C1{ Fs:0 Fs:8 FL:31}



static void Test_BFu0s_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu31ll, BFu0s_BFu8s_BFu31ll)
//============================================================================


struct  BFu0s_BFu8s_BFu32i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu8s_BFu32i) C1{ Fs:0 Fs:8 Fi:32}



static void Test_BFu0s_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu32i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu32i, BFu0s_BFu8s_BFu32i)
//============================================================================


struct  BFu0s_BFu8s_BFu32ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu8s_BFu32ll) C1{ Fs:0 Fs:8 FL:32}



static void Test_BFu0s_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu32ll, BFu0s_BFu8s_BFu32ll)
//============================================================================


struct  BFu0s_BFu8s_BFu33  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu8s_BFu33) C1{ Fs:0 Fs:8 FL:33}



static void Test_BFu0s_BFu8s_BFu33()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu33");
    static STRUCT_IF_C BFu0s_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0s_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0s_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu33, BFu0s_BFu8s_BFu33)
//============================================================================


struct  BFu0s_BFu8s_BFu7c  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu8s_BFu7c) C1{ Fs:0 Fs:8 Fc:7}



static void Test_BFu0s_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu7c");
    static STRUCT_IF_C BFu0s_BFu8s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu7c, BFu0s_BFu8s_BFu7c)
//============================================================================


struct  BFu0s_BFu8s_BFu7i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu8s_BFu7i) C1{ Fs:0 Fs:8 Fi:7}



static void Test_BFu0s_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu7i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu7i, BFu0s_BFu8s_BFu7i)
//============================================================================


struct  BFu0s_BFu8s_BFu7ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu8s_BFu7ll) C1{ Fs:0 Fs:8 FL:7}



static void Test_BFu0s_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu7ll, BFu0s_BFu8s_BFu7ll)
//============================================================================


struct  BFu0s_BFu8s_BFu7s  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu8s_BFu7s) C1{ Fs:0 Fs:8 Fs:7}



static void Test_BFu0s_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu7s");
    static STRUCT_IF_C BFu0s_BFu8s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu7s, BFu0s_BFu8s_BFu7s)
//============================================================================


struct  BFu0s_BFu8s_BFu8c  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu8s_BFu8c) C1{ Fs:0 Fs:8 Fc:8}



static void Test_BFu0s_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu8c");
    static STRUCT_IF_C BFu0s_BFu8s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu8c, BFu0s_BFu8s_BFu8c)
//============================================================================


struct  BFu0s_BFu8s_BFu8i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu8s_BFu8i) C1{ Fs:0 Fs:8 Fi:8}



static void Test_BFu0s_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu8i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu8i, BFu0s_BFu8s_BFu8i)
//============================================================================


struct  BFu0s_BFu8s_BFu8ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu8s_BFu8ll) C1{ Fs:0 Fs:8 FL:8}



static void Test_BFu0s_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu8ll, BFu0s_BFu8s_BFu8ll)
//============================================================================


struct  BFu0s_BFu8s_BFu8s  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu8s_BFu8s) C1{ Fs:0 Fs:8 Fs:8}



static void Test_BFu0s_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu8s");
    static STRUCT_IF_C BFu0s_BFu8s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu0s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu8s, BFu0s_BFu8s_BFu8s)
//============================================================================


struct  BFu0s_BFu8s_BFu9i  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu8s_BFu9i) C1{ Fs:0 Fs:8 Fi:9}



static void Test_BFu0s_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu9i");
    static STRUCT_IF_C BFu0s_BFu8s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0s_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu9i, BFu0s_BFu8s_BFu9i)
//============================================================================


struct  BFu0s_BFu8s_BFu9ll  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu8s_BFu9ll) C1{ Fs:0 Fs:8 FL:9}



static void Test_BFu0s_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu0s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu9ll, BFu0s_BFu8s_BFu9ll)
//============================================================================


struct  BFu0s_BFu8s_BFu9s  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu8s_BFu9s) C1{ Fs:0 Fs:8 Fs:9}



static void Test_BFu0s_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu8s_BFu9s");
    static STRUCT_IF_C BFu0s_BFu8s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_BFu9s, BFu0s_BFu8s_BFu9s)
//============================================================================


struct  BFu0s_BFu8s_C  {
  unsigned short  :0;
  unsigned short v1:8;
  char v2;
};
//SIG(1 BFu0s_BFu8s_C) C1{ Fs:0 Fs:8 Fc}



static void Test_BFu0s_BFu8s_C()
{
  {
    init_simple_test("BFu0s_BFu8s_C");
    static STRUCT_IF_C BFu0s_BFu8s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_C");
    check_field_offset(lv, v2, 1, "BFu0s_BFu8s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_C, BFu0s_BFu8s_C)
//============================================================================


struct  BFu0s_BFu8s_D  {
  unsigned short  :0;
  unsigned short v1:8;
  double v2;
};
//SIG(1 BFu0s_BFu8s_D) C1{ Fs:0 Fs:8 FL}



static void Test_BFu0s_BFu8s_D()
{
  {
    init_simple_test("BFu0s_BFu8s_D");
    static STRUCT_IF_C BFu0s_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_D, BFu0s_BFu8s_D)
//============================================================================


struct  BFu0s_BFu8s_F  {
  unsigned short  :0;
  unsigned short v1:8;
  float v2;
};
//SIG(1 BFu0s_BFu8s_F) C1{ Fs:0 Fs:8 Fi}



static void Test_BFu0s_BFu8s_F()
{
  {
    init_simple_test("BFu0s_BFu8s_F");
    static STRUCT_IF_C BFu0s_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_F, BFu0s_BFu8s_F)
//============================================================================


struct  BFu0s_BFu8s_I  {
  unsigned short  :0;
  unsigned short v1:8;
  int v2;
};
//SIG(1 BFu0s_BFu8s_I) C1{ Fs:0 Fs:8 Fi}



static void Test_BFu0s_BFu8s_I()
{
  {
    init_simple_test("BFu0s_BFu8s_I");
    static STRUCT_IF_C BFu0s_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_I, BFu0s_BFu8s_I)
//============================================================================


struct  BFu0s_BFu8s_Ip  {
  unsigned short  :0;
  unsigned short v1:8;
  int *v2;
};
//SIG(1 BFu0s_BFu8s_Ip) C1{ Fs:0 Fs:8 Fp}



static void Test_BFu0s_BFu8s_Ip()
{
  {
    init_simple_test("BFu0s_BFu8s_Ip");
    static STRUCT_IF_C BFu0s_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_Ip, BFu0s_BFu8s_Ip)
//============================================================================


struct  BFu0s_BFu8s_L  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu8s_L) C1{ Fs:0 Fs:8 FL}



static void Test_BFu0s_BFu8s_L()
{
  {
    init_simple_test("BFu0s_BFu8s_L");
    static STRUCT_IF_C BFu0s_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_L, BFu0s_BFu8s_L)
//============================================================================


struct  BFu0s_BFu8s_S  {
  unsigned short  :0;
  unsigned short v1:8;
  short v2;
};
//SIG(1 BFu0s_BFu8s_S) C1{ Fs:0 Fs:8 Fs}



static void Test_BFu0s_BFu8s_S()
{
  {
    init_simple_test("BFu0s_BFu8s_S");
    static STRUCT_IF_C BFu0s_BFu8s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu8s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_S, BFu0s_BFu8s_S)
//============================================================================


struct  BFu0s_BFu8s_Uc  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu8s_Uc) C1{ Fs:0 Fs:8 Fc}



static void Test_BFu0s_BFu8s_Uc()
{
  {
    init_simple_test("BFu0s_BFu8s_Uc");
    static STRUCT_IF_C BFu0s_BFu8s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu8s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_Uc");
    check_field_offset(lv, v2, 1, "BFu0s_BFu8s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_Uc, BFu0s_BFu8s_Uc)
//============================================================================


struct  BFu0s_BFu8s_Ui  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu8s_Ui) C1{ Fs:0 Fs:8 Fi}



static void Test_BFu0s_BFu8s_Ui()
{
  {
    init_simple_test("BFu0s_BFu8s_Ui");
    static STRUCT_IF_C BFu0s_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu8s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_Ui, BFu0s_BFu8s_Ui)
//============================================================================


struct  BFu0s_BFu8s_Ul  {
  unsigned short  :0;
  unsigned short v1:8;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu8s_Ul) C1{ Fs:0 Fs:8 FL}



static void Test_BFu0s_BFu8s_Ul()
{
  {
    init_simple_test("BFu0s_BFu8s_Ul");
    static STRUCT_IF_C BFu0s_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_Ul, BFu0s_BFu8s_Ul)
//============================================================================


struct  BFu0s_BFu8s_Us  {
  unsigned short  :0;
  unsigned short v1:8;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu8s_Us) C1{ Fs:0 Fs:8 Fs}



static void Test_BFu0s_BFu8s_Us()
{
  {
    init_simple_test("BFu0s_BFu8s_Us");
    static STRUCT_IF_C BFu0s_BFu8s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu8s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu8s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_Us, BFu0s_BFu8s_Us)
//============================================================================


struct  BFu0s_BFu8s_Vp  {
  unsigned short  :0;
  unsigned short v1:8;
  void *v2;
};
//SIG(1 BFu0s_BFu8s_Vp) C1{ Fs:0 Fs:8 Fp}



static void Test_BFu0s_BFu8s_Vp()
{
  {
    init_simple_test("BFu0s_BFu8s_Vp");
    static STRUCT_IF_C BFu0s_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu0s_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu8s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu8s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu8s_Vp, BFu0s_BFu8s_Vp)
//============================================================================


struct  BFu0s_BFu9i  {
  unsigned short  :0;
  unsigned int v1:9;
};
//SIG(1 BFu0s_BFu9i) C1{ Fs:0 Fi:9}



static void Test_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu9i");
    static STRUCT_IF_C BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i, BFu0s_BFu9i)
//============================================================================


struct  BFu0s_BFu9i_BFu0c  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu9i_BFu0c) C1{ Fs:0 Fi:9 Fc:0}



static void Test_BFu0s_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu0c");
    static STRUCT_IF_C BFu0s_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu0c, BFu0s_BFu9i_BFu0c)
//============================================================================


struct  BFu0s_BFu9i_BFu0i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu9i_BFu0i) C1{ Fs:0 Fi:9 Fi:0}



static void Test_BFu0s_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu0i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu0i, BFu0s_BFu9i_BFu0i)
//============================================================================


struct  BFu0s_BFu9i_BFu0ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu9i_BFu0ll) C1{ Fs:0 Fi:9 FL:0}



static void Test_BFu0s_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu0s_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu0ll, BFu0s_BFu9i_BFu0ll)
//============================================================================


struct  BFu0s_BFu9i_BFu0s  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu9i_BFu0s) C1{ Fs:0 Fi:9 Fs:0}



static void Test_BFu0s_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu0s");
    static STRUCT_IF_C BFu0s_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu0s, BFu0s_BFu9i_BFu0s)
//============================================================================


struct  BFu0s_BFu9i_BFu15i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu9i_BFu15i) C1{ Fs:0 Fi:9 Fi:15}



static void Test_BFu0s_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu15i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0s_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu15i, BFu0s_BFu9i_BFu15i)
//============================================================================


struct  BFu0s_BFu9i_BFu15ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu9i_BFu15ll) C1{ Fs:0 Fi:9 FL:15}



static void Test_BFu0s_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu15ll, BFu0s_BFu9i_BFu15ll)
//============================================================================


struct  BFu0s_BFu9i_BFu15s  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu9i_BFu15s) C1{ Fs:0 Fi:9 Fs:15}



static void Test_BFu0s_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu15s");
    static STRUCT_IF_C BFu0s_BFu9i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu15s, BFu0s_BFu9i_BFu15s)
//============================================================================


struct  BFu0s_BFu9i_BFu16i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu9i_BFu16i) C1{ Fs:0 Fi:9 Fi:16}



static void Test_BFu0s_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu16i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0s_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu16i, BFu0s_BFu9i_BFu16i)
//============================================================================


struct  BFu0s_BFu9i_BFu16ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu9i_BFu16ll) C1{ Fs:0 Fi:9 FL:16}



static void Test_BFu0s_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu16ll, BFu0s_BFu9i_BFu16ll)
//============================================================================


struct  BFu0s_BFu9i_BFu16s  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu9i_BFu16s) C1{ Fs:0 Fi:9 Fs:16}



static void Test_BFu0s_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu16s");
    static STRUCT_IF_C BFu0s_BFu9i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu16s, BFu0s_BFu9i_BFu16s)
//============================================================================


struct  BFu0s_BFu9i_BFu17i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu9i_BFu17i) C1{ Fs:0 Fi:9 Fi:17}



static void Test_BFu0s_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu17i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0s_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu17i, BFu0s_BFu9i_BFu17i)
//============================================================================


struct  BFu0s_BFu9i_BFu17ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu9i_BFu17ll) C1{ Fs:0 Fi:9 FL:17}



static void Test_BFu0s_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu17ll, BFu0s_BFu9i_BFu17ll)
//============================================================================


struct  BFu0s_BFu9i_BFu1c  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu9i_BFu1c) C1{ Fs:0 Fi:9 Fc:1}



static void Test_BFu0s_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu1c");
    static STRUCT_IF_C BFu0s_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu1c, BFu0s_BFu9i_BFu1c)
//============================================================================


struct  BFu0s_BFu9i_BFu1i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu9i_BFu1i) C1{ Fs:0 Fi:9 Fi:1}



static void Test_BFu0s_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu1i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu1i, BFu0s_BFu9i_BFu1i)
//============================================================================


struct  BFu0s_BFu9i_BFu1ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu9i_BFu1ll) C1{ Fs:0 Fi:9 FL:1}



static void Test_BFu0s_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu1ll, BFu0s_BFu9i_BFu1ll)
//============================================================================


struct  BFu0s_BFu9i_BFu1s  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu9i_BFu1s) C1{ Fs:0 Fi:9 Fs:1}



static void Test_BFu0s_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu1s");
    static STRUCT_IF_C BFu0s_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu1s, BFu0s_BFu9i_BFu1s)
//============================================================================


struct  BFu0s_BFu9i_BFu31i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu9i_BFu31i) C1{ Fs:0 Fi:9 Fi:31}



static void Test_BFu0s_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu31i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu31i, BFu0s_BFu9i_BFu31i)
//============================================================================


struct  BFu0s_BFu9i_BFu31ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu9i_BFu31ll) C1{ Fs:0 Fi:9 FL:31}



static void Test_BFu0s_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu0s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu31ll, BFu0s_BFu9i_BFu31ll)
//============================================================================


struct  BFu0s_BFu9i_BFu32i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu9i_BFu32i) C1{ Fs:0 Fi:9 Fi:32}



static void Test_BFu0s_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu32i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu32i, BFu0s_BFu9i_BFu32i)
//============================================================================


struct  BFu0s_BFu9i_BFu32ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu9i_BFu32ll) C1{ Fs:0 Fi:9 FL:32}



static void Test_BFu0s_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu0s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu32ll, BFu0s_BFu9i_BFu32ll)
//============================================================================


struct  BFu0s_BFu9i_BFu33  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu9i_BFu33) C1{ Fs:0 Fi:9 FL:33}



static void Test_BFu0s_BFu9i_BFu33()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu33");
    static STRUCT_IF_C BFu0s_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu0s_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu33, BFu0s_BFu9i_BFu33)
//============================================================================


struct  BFu0s_BFu9i_BFu7c  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu9i_BFu7c) C1{ Fs:0 Fi:9 Fc:7}



static void Test_BFu0s_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu7c");
    static STRUCT_IF_C BFu0s_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu7c, BFu0s_BFu9i_BFu7c)
//============================================================================


struct  BFu0s_BFu9i_BFu7i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu9i_BFu7i) C1{ Fs:0 Fi:9 Fi:7}



static void Test_BFu0s_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu7i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu7i, BFu0s_BFu9i_BFu7i)
//============================================================================


struct  BFu0s_BFu9i_BFu7ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu9i_BFu7ll) C1{ Fs:0 Fi:9 FL:7}



static void Test_BFu0s_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu7ll, BFu0s_BFu9i_BFu7ll)
//============================================================================


struct  BFu0s_BFu9i_BFu7s  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu9i_BFu7s) C1{ Fs:0 Fi:9 Fs:7}



static void Test_BFu0s_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu7s");
    static STRUCT_IF_C BFu0s_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu7s, BFu0s_BFu9i_BFu7s)
//============================================================================


struct  BFu0s_BFu9i_BFu8c  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu9i_BFu8c) C1{ Fs:0 Fi:9 Fc:8}



static void Test_BFu0s_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu8c");
    static STRUCT_IF_C BFu0s_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu8c, BFu0s_BFu9i_BFu8c)
//============================================================================


struct  BFu0s_BFu9i_BFu8i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu9i_BFu8i) C1{ Fs:0 Fi:9 Fi:8}



static void Test_BFu0s_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu8i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0s_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu8i, BFu0s_BFu9i_BFu8i)
//============================================================================


struct  BFu0s_BFu9i_BFu8ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu9i_BFu8ll) C1{ Fs:0 Fi:9 FL:8}



static void Test_BFu0s_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu8ll, BFu0s_BFu9i_BFu8ll)
//============================================================================


struct  BFu0s_BFu9i_BFu8s  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu9i_BFu8s) C1{ Fs:0 Fi:9 Fs:8}



static void Test_BFu0s_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu8s");
    static STRUCT_IF_C BFu0s_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu8s, BFu0s_BFu9i_BFu8s)
//============================================================================


struct  BFu0s_BFu9i_BFu9i  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu9i_BFu9i) C1{ Fs:0 Fi:9 Fi:9}



static void Test_BFu0s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu9i");
    static STRUCT_IF_C BFu0s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu9i, BFu0s_BFu9i_BFu9i)
//============================================================================


struct  BFu0s_BFu9i_BFu9ll  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu9i_BFu9ll) C1{ Fs:0 Fi:9 FL:9}



static void Test_BFu0s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu9ll, BFu0s_BFu9i_BFu9ll)
//============================================================================


struct  BFu0s_BFu9i_BFu9s  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu9i_BFu9s) C1{ Fs:0 Fi:9 Fs:9}



static void Test_BFu0s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu9i_BFu9s");
    static STRUCT_IF_C BFu0s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_BFu9s, BFu0s_BFu9i_BFu9s)
//============================================================================


struct  BFu0s_BFu9i_C  {
  unsigned short  :0;
  unsigned int v1:9;
  char v2;
};
//SIG(1 BFu0s_BFu9i_C) C1{ Fs:0 Fi:9 Fc}



static void Test_BFu0s_BFu9i_C()
{
  {
    init_simple_test("BFu0s_BFu9i_C");
    static STRUCT_IF_C BFu0s_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_C, BFu0s_BFu9i_C)
//============================================================================


struct  BFu0s_BFu9i_D  {
  unsigned short  :0;
  unsigned int v1:9;
  double v2;
};
//SIG(1 BFu0s_BFu9i_D) C1{ Fs:0 Fi:9 FL}



static void Test_BFu0s_BFu9i_D()
{
  {
    init_simple_test("BFu0s_BFu9i_D");
    static STRUCT_IF_C BFu0s_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_D, BFu0s_BFu9i_D)
//============================================================================


struct  BFu0s_BFu9i_F  {
  unsigned short  :0;
  unsigned int v1:9;
  float v2;
};
//SIG(1 BFu0s_BFu9i_F) C1{ Fs:0 Fi:9 Fi}



static void Test_BFu0s_BFu9i_F()
{
  {
    init_simple_test("BFu0s_BFu9i_F");
    static STRUCT_IF_C BFu0s_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_F, BFu0s_BFu9i_F)
//============================================================================


struct  BFu0s_BFu9i_I  {
  unsigned short  :0;
  unsigned int v1:9;
  int v2;
};
//SIG(1 BFu0s_BFu9i_I) C1{ Fs:0 Fi:9 Fi}



static void Test_BFu0s_BFu9i_I()
{
  {
    init_simple_test("BFu0s_BFu9i_I");
    static STRUCT_IF_C BFu0s_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_I, BFu0s_BFu9i_I)
//============================================================================


struct  BFu0s_BFu9i_Ip  {
  unsigned short  :0;
  unsigned int v1:9;
  int *v2;
};
//SIG(1 BFu0s_BFu9i_Ip) C1{ Fs:0 Fi:9 Fp}



static void Test_BFu0s_BFu9i_Ip()
{
  {
    init_simple_test("BFu0s_BFu9i_Ip");
    static STRUCT_IF_C BFu0s_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_Ip, BFu0s_BFu9i_Ip)
//============================================================================


struct  BFu0s_BFu9i_L  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu9i_L) C1{ Fs:0 Fi:9 FL}



static void Test_BFu0s_BFu9i_L()
{
  {
    init_simple_test("BFu0s_BFu9i_L");
    static STRUCT_IF_C BFu0s_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_L, BFu0s_BFu9i_L)
//============================================================================


struct  BFu0s_BFu9i_S  {
  unsigned short  :0;
  unsigned int v1:9;
  short v2;
};
//SIG(1 BFu0s_BFu9i_S) C1{ Fs:0 Fi:9 Fs}



static void Test_BFu0s_BFu9i_S()
{
  {
    init_simple_test("BFu0s_BFu9i_S");
    static STRUCT_IF_C BFu0s_BFu9i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_S, BFu0s_BFu9i_S)
//============================================================================


struct  BFu0s_BFu9i_Uc  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu9i_Uc) C1{ Fs:0 Fi:9 Fc}



static void Test_BFu0s_BFu9i_Uc()
{
  {
    init_simple_test("BFu0s_BFu9i_Uc");
    static STRUCT_IF_C BFu0s_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_Uc, BFu0s_BFu9i_Uc)
//============================================================================


struct  BFu0s_BFu9i_Ui  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu9i_Ui) C1{ Fs:0 Fi:9 Fi}



static void Test_BFu0s_BFu9i_Ui()
{
  {
    init_simple_test("BFu0s_BFu9i_Ui");
    static STRUCT_IF_C BFu0s_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_Ui, BFu0s_BFu9i_Ui)
//============================================================================


struct  BFu0s_BFu9i_Ul  {
  unsigned short  :0;
  unsigned int v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu9i_Ul) C1{ Fs:0 Fi:9 FL}



static void Test_BFu0s_BFu9i_Ul()
{
  {
    init_simple_test("BFu0s_BFu9i_Ul");
    static STRUCT_IF_C BFu0s_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_Ul, BFu0s_BFu9i_Ul)
//============================================================================


struct  BFu0s_BFu9i_Us  {
  unsigned short  :0;
  unsigned int v1:9;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu9i_Us) C1{ Fs:0 Fi:9 Fs}



static void Test_BFu0s_BFu9i_Us()
{
  {
    init_simple_test("BFu0s_BFu9i_Us");
    static STRUCT_IF_C BFu0s_BFu9i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_Us, BFu0s_BFu9i_Us)
//============================================================================


struct  BFu0s_BFu9i_Vp  {
  unsigned short  :0;
  unsigned int v1:9;
  void *v2;
};
//SIG(1 BFu0s_BFu9i_Vp) C1{ Fs:0 Fi:9 Fp}



static void Test_BFu0s_BFu9i_Vp()
{
  {
    init_simple_test("BFu0s_BFu9i_Vp");
    static STRUCT_IF_C BFu0s_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9i_Vp, BFu0s_BFu9i_Vp)
//============================================================================


struct  BFu0s_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:9;
};
//SIG(1 BFu0s_BFu9ll) C1{ Fs:0 FL:9}



static void Test_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll, BFu0s_BFu9ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu0c  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu9ll_BFu0c) C1{ Fs:0 FL:9 Fc:0}



static void Test_BFu0s_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu0c");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu0c, BFu0s_BFu9ll_BFu0c)
//============================================================================


struct  BFu0s_BFu9ll_BFu0i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu9ll_BFu0i) C1{ Fs:0 FL:9 Fi:0}



static void Test_BFu0s_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu0i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu0i, BFu0s_BFu9ll_BFu0i)
//============================================================================


struct  BFu0s_BFu9ll_BFu0ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu9ll_BFu0ll) C1{ Fs:0 FL:9 FL:0}



static void Test_BFu0s_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu0ll, BFu0s_BFu9ll_BFu0ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu0s  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu9ll_BFu0s) C1{ Fs:0 FL:9 Fs:0}



static void Test_BFu0s_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu0s");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu0s, BFu0s_BFu9ll_BFu0s)
//============================================================================


struct  BFu0s_BFu9ll_BFu15i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu9ll_BFu15i) C1{ Fs:0 FL:9 Fi:15}



static void Test_BFu0s_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu15i, BFu0s_BFu9ll_BFu15i)
//============================================================================


struct  BFu0s_BFu9ll_BFu15ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu9ll_BFu15ll) C1{ Fs:0 FL:9 FL:15}



static void Test_BFu0s_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu15ll, BFu0s_BFu9ll_BFu15ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu15s  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu9ll_BFu15s) C1{ Fs:0 FL:9 Fs:15}



static void Test_BFu0s_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu15s, BFu0s_BFu9ll_BFu15s)
//============================================================================


struct  BFu0s_BFu9ll_BFu16i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu9ll_BFu16i) C1{ Fs:0 FL:9 Fi:16}



static void Test_BFu0s_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu16i, BFu0s_BFu9ll_BFu16i)
//============================================================================


struct  BFu0s_BFu9ll_BFu16ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu9ll_BFu16ll) C1{ Fs:0 FL:9 FL:16}



static void Test_BFu0s_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu16ll, BFu0s_BFu9ll_BFu16ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu16s  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu9ll_BFu16s) C1{ Fs:0 FL:9 Fs:16}



static void Test_BFu0s_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu16s, BFu0s_BFu9ll_BFu16s)
//============================================================================


struct  BFu0s_BFu9ll_BFu17i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu9ll_BFu17i) C1{ Fs:0 FL:9 Fi:17}



static void Test_BFu0s_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu17i, BFu0s_BFu9ll_BFu17i)
//============================================================================


struct  BFu0s_BFu9ll_BFu17ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu9ll_BFu17ll) C1{ Fs:0 FL:9 FL:17}



static void Test_BFu0s_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu17ll, BFu0s_BFu9ll_BFu17ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu1c  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu9ll_BFu1c) C1{ Fs:0 FL:9 Fc:1}



static void Test_BFu0s_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu1c, BFu0s_BFu9ll_BFu1c)
//============================================================================


struct  BFu0s_BFu9ll_BFu1i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu9ll_BFu1i) C1{ Fs:0 FL:9 Fi:1}



static void Test_BFu0s_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu1i, BFu0s_BFu9ll_BFu1i)
//============================================================================


struct  BFu0s_BFu9ll_BFu1ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu9ll_BFu1ll) C1{ Fs:0 FL:9 FL:1}



static void Test_BFu0s_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu1ll, BFu0s_BFu9ll_BFu1ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu1s  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu9ll_BFu1s) C1{ Fs:0 FL:9 Fs:1}



static void Test_BFu0s_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu1s, BFu0s_BFu9ll_BFu1s)
//============================================================================


struct  BFu0s_BFu9ll_BFu31i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu9ll_BFu31i) C1{ Fs:0 FL:9 Fi:31}



static void Test_BFu0s_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu31i, BFu0s_BFu9ll_BFu31i)
//============================================================================


struct  BFu0s_BFu9ll_BFu31ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu9ll_BFu31ll) C1{ Fs:0 FL:9 FL:31}



static void Test_BFu0s_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu0s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu31ll, BFu0s_BFu9ll_BFu31ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu32i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu9ll_BFu32i) C1{ Fs:0 FL:9 Fi:32}



static void Test_BFu0s_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu32i, BFu0s_BFu9ll_BFu32i)
//============================================================================


struct  BFu0s_BFu9ll_BFu32ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu9ll_BFu32ll) C1{ Fs:0 FL:9 FL:32}



static void Test_BFu0s_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu0s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu32ll, BFu0s_BFu9ll_BFu32ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu33  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu9ll_BFu33) C1{ Fs:0 FL:9 FL:33}



static void Test_BFu0s_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu33");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu0s_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu33, BFu0s_BFu9ll_BFu33)
//============================================================================


struct  BFu0s_BFu9ll_BFu7c  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu9ll_BFu7c) C1{ Fs:0 FL:9 Fc:7}



static void Test_BFu0s_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu7c, BFu0s_BFu9ll_BFu7c)
//============================================================================


struct  BFu0s_BFu9ll_BFu7i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu9ll_BFu7i) C1{ Fs:0 FL:9 Fi:7}



static void Test_BFu0s_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu7i, BFu0s_BFu9ll_BFu7i)
//============================================================================


struct  BFu0s_BFu9ll_BFu7ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu9ll_BFu7ll) C1{ Fs:0 FL:9 FL:7}



static void Test_BFu0s_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu7ll, BFu0s_BFu9ll_BFu7ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu7s  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu9ll_BFu7s) C1{ Fs:0 FL:9 Fs:7}



static void Test_BFu0s_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu7s, BFu0s_BFu9ll_BFu7s)
//============================================================================


struct  BFu0s_BFu9ll_BFu8c  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu9ll_BFu8c) C1{ Fs:0 FL:9 Fc:8}



static void Test_BFu0s_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu8c, BFu0s_BFu9ll_BFu8c)
//============================================================================


struct  BFu0s_BFu9ll_BFu8i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu9ll_BFu8i) C1{ Fs:0 FL:9 Fi:8}



static void Test_BFu0s_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu8i, BFu0s_BFu9ll_BFu8i)
//============================================================================


struct  BFu0s_BFu9ll_BFu8ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu9ll_BFu8ll) C1{ Fs:0 FL:9 FL:8}



static void Test_BFu0s_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu8ll, BFu0s_BFu9ll_BFu8ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu8s  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu9ll_BFu8s) C1{ Fs:0 FL:9 Fs:8}



static void Test_BFu0s_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu8s, BFu0s_BFu9ll_BFu8s)
//============================================================================


struct  BFu0s_BFu9ll_BFu9i  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu9ll_BFu9i) C1{ Fs:0 FL:9 Fi:9}



static void Test_BFu0s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu9i, BFu0s_BFu9ll_BFu9i)
//============================================================================


struct  BFu0s_BFu9ll_BFu9ll  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu9ll_BFu9ll) C1{ Fs:0 FL:9 FL:9}



static void Test_BFu0s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu9ll, BFu0s_BFu9ll_BFu9ll)
//============================================================================


struct  BFu0s_BFu9ll_BFu9s  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu9ll_BFu9s) C1{ Fs:0 FL:9 Fs:9}



static void Test_BFu0s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu0s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_BFu9s, BFu0s_BFu9ll_BFu9s)
//============================================================================


struct  BFu0s_BFu9ll_C  {
  unsigned short  :0;
  __tsu64 v1:9;
  char v2;
};
//SIG(1 BFu0s_BFu9ll_C) C1{ Fs:0 FL:9 Fc}



static void Test_BFu0s_BFu9ll_C()
{
  {
    init_simple_test("BFu0s_BFu9ll_C");
    static STRUCT_IF_C BFu0s_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_C, BFu0s_BFu9ll_C)
//============================================================================


struct  BFu0s_BFu9ll_D  {
  unsigned short  :0;
  __tsu64 v1:9;
  double v2;
};
//SIG(1 BFu0s_BFu9ll_D) C1{ Fs:0 FL:9 FL}



static void Test_BFu0s_BFu9ll_D()
{
  {
    init_simple_test("BFu0s_BFu9ll_D");
    static STRUCT_IF_C BFu0s_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_D, BFu0s_BFu9ll_D)
//============================================================================


struct  BFu0s_BFu9ll_F  {
  unsigned short  :0;
  __tsu64 v1:9;
  float v2;
};
//SIG(1 BFu0s_BFu9ll_F) C1{ Fs:0 FL:9 Fi}



static void Test_BFu0s_BFu9ll_F()
{
  {
    init_simple_test("BFu0s_BFu9ll_F");
    static STRUCT_IF_C BFu0s_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_F, BFu0s_BFu9ll_F)
//============================================================================


struct  BFu0s_BFu9ll_I  {
  unsigned short  :0;
  __tsu64 v1:9;
  int v2;
};
//SIG(1 BFu0s_BFu9ll_I) C1{ Fs:0 FL:9 Fi}



static void Test_BFu0s_BFu9ll_I()
{
  {
    init_simple_test("BFu0s_BFu9ll_I");
    static STRUCT_IF_C BFu0s_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_I, BFu0s_BFu9ll_I)
//============================================================================


struct  BFu0s_BFu9ll_Ip  {
  unsigned short  :0;
  __tsu64 v1:9;
  int *v2;
};
//SIG(1 BFu0s_BFu9ll_Ip) C1{ Fs:0 FL:9 Fp}



static void Test_BFu0s_BFu9ll_Ip()
{
  {
    init_simple_test("BFu0s_BFu9ll_Ip");
    static STRUCT_IF_C BFu0s_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_Ip, BFu0s_BFu9ll_Ip)
//============================================================================


struct  BFu0s_BFu9ll_L  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu9ll_L) C1{ Fs:0 FL:9 FL}



static void Test_BFu0s_BFu9ll_L()
{
  {
    init_simple_test("BFu0s_BFu9ll_L");
    static STRUCT_IF_C BFu0s_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_L, BFu0s_BFu9ll_L)
//============================================================================


struct  BFu0s_BFu9ll_S  {
  unsigned short  :0;
  __tsu64 v1:9;
  short v2;
};
//SIG(1 BFu0s_BFu9ll_S) C1{ Fs:0 FL:9 Fs}



static void Test_BFu0s_BFu9ll_S()
{
  {
    init_simple_test("BFu0s_BFu9ll_S");
    static STRUCT_IF_C BFu0s_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_S, BFu0s_BFu9ll_S)
//============================================================================


struct  BFu0s_BFu9ll_Uc  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu9ll_Uc) C1{ Fs:0 FL:9 Fc}



static void Test_BFu0s_BFu9ll_Uc()
{
  {
    init_simple_test("BFu0s_BFu9ll_Uc");
    static STRUCT_IF_C BFu0s_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_Uc, BFu0s_BFu9ll_Uc)
//============================================================================


struct  BFu0s_BFu9ll_Ui  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu9ll_Ui) C1{ Fs:0 FL:9 Fi}



static void Test_BFu0s_BFu9ll_Ui()
{
  {
    init_simple_test("BFu0s_BFu9ll_Ui");
    static STRUCT_IF_C BFu0s_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_Ui, BFu0s_BFu9ll_Ui)
//============================================================================


struct  BFu0s_BFu9ll_Ul  {
  unsigned short  :0;
  __tsu64 v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu9ll_Ul) C1{ Fs:0 FL:9 FL}



static void Test_BFu0s_BFu9ll_Ul()
{
  {
    init_simple_test("BFu0s_BFu9ll_Ul");
    static STRUCT_IF_C BFu0s_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_Ul, BFu0s_BFu9ll_Ul)
//============================================================================


struct  BFu0s_BFu9ll_Us  {
  unsigned short  :0;
  __tsu64 v1:9;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu9ll_Us) C1{ Fs:0 FL:9 Fs}



static void Test_BFu0s_BFu9ll_Us()
{
  {
    init_simple_test("BFu0s_BFu9ll_Us");
    static STRUCT_IF_C BFu0s_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_Us, BFu0s_BFu9ll_Us)
//============================================================================


struct  BFu0s_BFu9ll_Vp  {
  unsigned short  :0;
  __tsu64 v1:9;
  void *v2;
};
//SIG(1 BFu0s_BFu9ll_Vp) C1{ Fs:0 FL:9 Fp}



static void Test_BFu0s_BFu9ll_Vp()
{
  {
    init_simple_test("BFu0s_BFu9ll_Vp");
    static STRUCT_IF_C BFu0s_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9ll_Vp, BFu0s_BFu9ll_Vp)
//============================================================================


struct  BFu0s_BFu9s  {
  unsigned short  :0;
  unsigned short v1:9;
};
//SIG(1 BFu0s_BFu9s) C1{ Fs:0 Fs:9}



static void Test_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu9s");
    static STRUCT_IF_C BFu0s_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s, BFu0s_BFu9s)
//============================================================================


struct  BFu0s_BFu9s_BFu0c  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned char  :0;
};
//SIG(1 BFu0s_BFu9s_BFu0c) C1{ Fs:0 Fs:9 Fc:0}



static void Test_BFu0s_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu0c");
    static STRUCT_IF_C BFu0s_BFu9s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu0c, BFu0s_BFu9s_BFu0c)
//============================================================================


struct  BFu0s_BFu9s_BFu0i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int  :0;
};
//SIG(1 BFu0s_BFu9s_BFu0i) C1{ Fs:0 Fs:9 Fi:0}



static void Test_BFu0s_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu0i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu0i, BFu0s_BFu9s_BFu0i)
//============================================================================


struct  BFu0s_BFu9s_BFu0ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64  :0;
};
//SIG(1 BFu0s_BFu9s_BFu0ll) C1{ Fs:0 Fs:9 FL:0}



static void Test_BFu0s_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu0ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu0s_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu0ll, BFu0s_BFu9s_BFu0ll)
//============================================================================


struct  BFu0s_BFu9s_BFu0s  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned short  :0;
};
//SIG(1 BFu0s_BFu9s_BFu0s) C1{ Fs:0 Fs:9 Fs:0}



static void Test_BFu0s_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu0s");
    static STRUCT_IF_C BFu0s_BFu9s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu0s, BFu0s_BFu9s_BFu0s)
//============================================================================


struct  BFu0s_BFu9s_BFu15i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu0s_BFu9s_BFu15i) C1{ Fs:0 Fs:9 Fi:15}



static void Test_BFu0s_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu15i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0s_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu15i, BFu0s_BFu9s_BFu15i)
//============================================================================


struct  BFu0s_BFu9s_BFu15ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_BFu9s_BFu15ll) C1{ Fs:0 Fs:9 FL:15}



static void Test_BFu0s_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu0s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu0s_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu15ll, BFu0s_BFu9s_BFu15ll)
//============================================================================


struct  BFu0s_BFu9s_BFu15s  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu0s_BFu9s_BFu15s) C1{ Fs:0 Fs:9 Fs:15}



static void Test_BFu0s_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu15s");
    static STRUCT_IF_C BFu0s_BFu9s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu15s, BFu0s_BFu9s_BFu15s)
//============================================================================


struct  BFu0s_BFu9s_BFu16i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:16;
};
//SIG(1 BFu0s_BFu9s_BFu16i) C1{ Fs:0 Fs:9 Fi:16}



static void Test_BFu0s_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu16i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0s_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu16i, BFu0s_BFu9s_BFu16i)
//============================================================================


struct  BFu0s_BFu9s_BFu16ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_BFu9s_BFu16ll) C1{ Fs:0 Fs:9 FL:16}



static void Test_BFu0s_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu0s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu0s_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu16ll, BFu0s_BFu9s_BFu16ll)
//============================================================================


struct  BFu0s_BFu9s_BFu16s  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned short v2:16;
};
//SIG(1 BFu0s_BFu9s_BFu16s) C1{ Fs:0 Fs:9 Fs:16}



static void Test_BFu0s_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu16s");
    static STRUCT_IF_C BFu0s_BFu9s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu16s, BFu0s_BFu9s_BFu16s)
//============================================================================


struct  BFu0s_BFu9s_BFu17i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu0s_BFu9s_BFu17i) C1{ Fs:0 Fs:9 Fi:17}



static void Test_BFu0s_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu17i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0s_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu17i, BFu0s_BFu9s_BFu17i)
//============================================================================


struct  BFu0s_BFu9s_BFu17ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_BFu9s_BFu17ll) C1{ Fs:0 Fs:9 FL:17}



static void Test_BFu0s_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu0s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu0s_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu17ll, BFu0s_BFu9s_BFu17ll)
//============================================================================


struct  BFu0s_BFu9s_BFu1c  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned char v2:1;
};
//SIG(1 BFu0s_BFu9s_BFu1c) C1{ Fs:0 Fs:9 Fc:1}



static void Test_BFu0s_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu1c");
    static STRUCT_IF_C BFu0s_BFu9s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu1c, BFu0s_BFu9s_BFu1c)
//============================================================================


struct  BFu0s_BFu9s_BFu1i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu0s_BFu9s_BFu1i) C1{ Fs:0 Fs:9 Fi:1}



static void Test_BFu0s_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu1i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu1i, BFu0s_BFu9s_BFu1i)
//============================================================================


struct  BFu0s_BFu9s_BFu1ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_BFu9s_BFu1ll) C1{ Fs:0 Fs:9 FL:1}



static void Test_BFu0s_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu1ll, BFu0s_BFu9s_BFu1ll)
//============================================================================


struct  BFu0s_BFu9s_BFu1s  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu0s_BFu9s_BFu1s) C1{ Fs:0 Fs:9 Fs:1}



static void Test_BFu0s_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu1s");
    static STRUCT_IF_C BFu0s_BFu9s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu0s_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu1s, BFu0s_BFu9s_BFu1s)
//============================================================================


struct  BFu0s_BFu9s_BFu31i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:31;
};
//SIG(1 BFu0s_BFu9s_BFu31i) C1{ Fs:0 Fs:9 Fi:31}



static void Test_BFu0s_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu31i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu31i, BFu0s_BFu9s_BFu31i)
//============================================================================


struct  BFu0s_BFu9s_BFu31ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_BFu9s_BFu31ll) C1{ Fs:0 Fs:9 FL:31}



static void Test_BFu0s_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu0s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu0s_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu31ll, BFu0s_BFu9s_BFu31ll)
//============================================================================


struct  BFu0s_BFu9s_BFu32i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:32;
};
//SIG(1 BFu0s_BFu9s_BFu32i) C1{ Fs:0 Fs:9 Fi:32}



static void Test_BFu0s_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu32i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu32i, BFu0s_BFu9s_BFu32i)
//============================================================================


struct  BFu0s_BFu9s_BFu32ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_BFu9s_BFu32ll) C1{ Fs:0 Fs:9 FL:32}



static void Test_BFu0s_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu0s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu0s_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu32ll, BFu0s_BFu9s_BFu32ll)
//============================================================================


struct  BFu0s_BFu9s_BFu33  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_BFu9s_BFu33) C1{ Fs:0 Fs:9 FL:33}



static void Test_BFu0s_BFu9s_BFu33()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu33");
    static STRUCT_IF_C BFu0s_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu0s_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu0s_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu33, BFu0s_BFu9s_BFu33)
//============================================================================


struct  BFu0s_BFu9s_BFu7c  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned char v2:7;
};
//SIG(1 BFu0s_BFu9s_BFu7c) C1{ Fs:0 Fs:9 Fc:7}



static void Test_BFu0s_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu7c");
    static STRUCT_IF_C BFu0s_BFu9s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu7c, BFu0s_BFu9s_BFu7c)
//============================================================================


struct  BFu0s_BFu9s_BFu7i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu0s_BFu9s_BFu7i) C1{ Fs:0 Fs:9 Fi:7}



static void Test_BFu0s_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu7i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu7i, BFu0s_BFu9s_BFu7i)
//============================================================================


struct  BFu0s_BFu9s_BFu7ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu0s_BFu9s_BFu7ll) C1{ Fs:0 Fs:9 FL:7}



static void Test_BFu0s_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu7ll, BFu0s_BFu9s_BFu7ll)
//============================================================================


struct  BFu0s_BFu9s_BFu7s  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu0s_BFu9s_BFu7s) C1{ Fs:0 Fs:9 Fs:7}



static void Test_BFu0s_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu7s");
    static STRUCT_IF_C BFu0s_BFu9s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu0s_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu0s_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu7s, BFu0s_BFu9s_BFu7s)
//============================================================================


struct  BFu0s_BFu9s_BFu8c  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu0s_BFu9s_BFu8c) C1{ Fs:0 Fs:9 Fc:8}



static void Test_BFu0s_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu8c");
    static STRUCT_IF_C BFu0s_BFu9s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu8c, BFu0s_BFu9s_BFu8c)
//============================================================================


struct  BFu0s_BFu9s_BFu8i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu0s_BFu9s_BFu8i) C1{ Fs:0 Fs:9 Fi:8}



static void Test_BFu0s_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu8i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0s_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu8i, BFu0s_BFu9s_BFu8i)
//============================================================================


struct  BFu0s_BFu9s_BFu8ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu0s_BFu9s_BFu8ll) C1{ Fs:0 Fs:9 FL:8}



static void Test_BFu0s_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu0s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu0s_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu8ll, BFu0s_BFu9s_BFu8ll)
//============================================================================


struct  BFu0s_BFu9s_BFu8s  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu0s_BFu9s_BFu8s) C1{ Fs:0 Fs:9 Fs:8}



static void Test_BFu0s_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu8s");
    static STRUCT_IF_C BFu0s_BFu9s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu0s_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu0s_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu8s, BFu0s_BFu9s_BFu8s)
//============================================================================


struct  BFu0s_BFu9s_BFu9i  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu0s_BFu9s_BFu9i) C1{ Fs:0 Fs:9 Fi:9}



static void Test_BFu0s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu9i");
    static STRUCT_IF_C BFu0s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu9i, BFu0s_BFu9s_BFu9i)
//============================================================================


struct  BFu0s_BFu9s_BFu9ll  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu0s_BFu9s_BFu9ll) C1{ Fs:0 Fs:9 FL:9}



static void Test_BFu0s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu0s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu0s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu9ll, BFu0s_BFu9s_BFu9ll)
//============================================================================


struct  BFu0s_BFu9s_BFu9s  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu0s_BFu9s_BFu9s) C1{ Fs:0 Fs:9 Fs:9}



static void Test_BFu0s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu0s_BFu9s_BFu9s");
    static STRUCT_IF_C BFu0s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu0s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_BFu9s, BFu0s_BFu9s_BFu9s)
//============================================================================


struct  BFu0s_BFu9s_C  {
  unsigned short  :0;
  unsigned short v1:9;
  char v2;
};
//SIG(1 BFu0s_BFu9s_C) C1{ Fs:0 Fs:9 Fc}



static void Test_BFu0s_BFu9s_C()
{
  {
    init_simple_test("BFu0s_BFu9s_C");
    static STRUCT_IF_C BFu0s_BFu9s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_C");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_C, BFu0s_BFu9s_C)
//============================================================================


struct  BFu0s_BFu9s_D  {
  unsigned short  :0;
  unsigned short v1:9;
  double v2;
};
//SIG(1 BFu0s_BFu9s_D) C1{ Fs:0 Fs:9 FL}



static void Test_BFu0s_BFu9s_D()
{
  {
    init_simple_test("BFu0s_BFu9s_D");
    static STRUCT_IF_C BFu0s_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_D, BFu0s_BFu9s_D)
//============================================================================


struct  BFu0s_BFu9s_F  {
  unsigned short  :0;
  unsigned short v1:9;
  float v2;
};
//SIG(1 BFu0s_BFu9s_F) C1{ Fs:0 Fs:9 Fi}



static void Test_BFu0s_BFu9s_F()
{
  {
    init_simple_test("BFu0s_BFu9s_F");
    static STRUCT_IF_C BFu0s_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_F");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_F, BFu0s_BFu9s_F)
//============================================================================


struct  BFu0s_BFu9s_I  {
  unsigned short  :0;
  unsigned short v1:9;
  int v2;
};
//SIG(1 BFu0s_BFu9s_I) C1{ Fs:0 Fs:9 Fi}



static void Test_BFu0s_BFu9s_I()
{
  {
    init_simple_test("BFu0s_BFu9s_I");
    static STRUCT_IF_C BFu0s_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_I");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_I, BFu0s_BFu9s_I)
//============================================================================


struct  BFu0s_BFu9s_Ip  {
  unsigned short  :0;
  unsigned short v1:9;
  int *v2;
};
//SIG(1 BFu0s_BFu9s_Ip) C1{ Fs:0 Fs:9 Fp}



static void Test_BFu0s_BFu9s_Ip()
{
  {
    init_simple_test("BFu0s_BFu9s_Ip");
    static STRUCT_IF_C BFu0s_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_Ip, BFu0s_BFu9s_Ip)
//============================================================================


struct  BFu0s_BFu9s_L  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsi64 v2;
};
//SIG(1 BFu0s_BFu9s_L) C1{ Fs:0 Fs:9 FL}



static void Test_BFu0s_BFu9s_L()
{
  {
    init_simple_test("BFu0s_BFu9s_L");
    static STRUCT_IF_C BFu0s_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_L, BFu0s_BFu9s_L)
//============================================================================


struct  BFu0s_BFu9s_S  {
  unsigned short  :0;
  unsigned short v1:9;
  short v2;
};
//SIG(1 BFu0s_BFu9s_S) C1{ Fs:0 Fs:9 Fs}



static void Test_BFu0s_BFu9s_S()
{
  {
    init_simple_test("BFu0s_BFu9s_S");
    static STRUCT_IF_C BFu0s_BFu9s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_S");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_S, BFu0s_BFu9s_S)
//============================================================================


struct  BFu0s_BFu9s_Uc  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned char v2;
};
//SIG(1 BFu0s_BFu9s_Uc) C1{ Fs:0 Fs:9 Fc}



static void Test_BFu0s_BFu9s_Uc()
{
  {
    init_simple_test("BFu0s_BFu9s_Uc");
    static STRUCT_IF_C BFu0s_BFu9s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_Uc");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_Uc, BFu0s_BFu9s_Uc)
//============================================================================


struct  BFu0s_BFu9s_Ui  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned int v2;
};
//SIG(1 BFu0s_BFu9s_Ui) C1{ Fs:0 Fs:9 Fi}



static void Test_BFu0s_BFu9s_Ui()
{
  {
    init_simple_test("BFu0s_BFu9s_Ui");
    static STRUCT_IF_C BFu0s_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_Ui");
    check_field_offset(lv, v2, 4, "BFu0s_BFu9s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_Ui, BFu0s_BFu9s_Ui)
//============================================================================


struct  BFu0s_BFu9s_Ul  {
  unsigned short  :0;
  unsigned short v1:9;
  __tsu64 v2;
};
//SIG(1 BFu0s_BFu9s_Ul) C1{ Fs:0 Fs:9 FL}



static void Test_BFu0s_BFu9s_Ul()
{
  {
    init_simple_test("BFu0s_BFu9s_Ul");
    static STRUCT_IF_C BFu0s_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu0s_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_Ul, BFu0s_BFu9s_Ul)
//============================================================================


struct  BFu0s_BFu9s_Us  {
  unsigned short  :0;
  unsigned short v1:9;
  unsigned short v2;
};
//SIG(1 BFu0s_BFu9s_Us) C1{ Fs:0 Fs:9 Fs}



static void Test_BFu0s_BFu9s_Us()
{
  {
    init_simple_test("BFu0s_BFu9s_Us");
    static STRUCT_IF_C BFu0s_BFu9s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_Us");
    check_field_offset(lv, v2, 2, "BFu0s_BFu9s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_Us, BFu0s_BFu9s_Us)
//============================================================================


struct  BFu0s_BFu9s_Vp  {
  unsigned short  :0;
  unsigned short v1:9;
  void *v2;
};
//SIG(1 BFu0s_BFu9s_Vp) C1{ Fs:0 Fs:9 Fp}



static void Test_BFu0s_BFu9s_Vp()
{
  {
    init_simple_test("BFu0s_BFu9s_Vp");
    static STRUCT_IF_C BFu0s_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu0s_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu0s_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu0s_BFu9s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu0s_BFu9s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_BFu9s_Vp, BFu0s_BFu9s_Vp)
//============================================================================


struct  BFu0s_C  {
  unsigned short  :0;
  char v1;
};
//SIG(1 BFu0s_C) C1{ Fs:0 Fc}



static void Test_BFu0s_C()
{
  {
    init_simple_test("BFu0s_C");
    static STRUCT_IF_C BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_C)");
    check_field_offset(lv, v1, 0, "BFu0s_C.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C, BFu0s_C)
//============================================================================


struct  BFu0s_C_BFu0c  {
  unsigned short  :0;
  char v1;
  unsigned char  :0;
};
//SIG(1 BFu0s_C_BFu0c) C1{ Fs:0 Fc Fc:0}



static void Test_BFu0s_C_BFu0c()
{
  {
    init_simple_test("BFu0s_C_BFu0c");
    static STRUCT_IF_C BFu0s_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(1,1), "sizeof(BFu0s_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_C_BFu0c)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu0c, BFu0s_C_BFu0c)
//============================================================================


struct  BFu0s_C_BFu0i  {
  unsigned short  :0;
  char v1;
  unsigned int  :0;
};
//SIG(1 BFu0s_C_BFu0i) C1{ Fs:0 Fc Fi:0}



static void Test_BFu0s_C_BFu0i()
{
  {
    init_simple_test("BFu0s_C_BFu0i");
    static STRUCT_IF_C BFu0s_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_C_BFu0i)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu0i, BFu0s_C_BFu0i)
//============================================================================


struct  BFu0s_C_BFu0ll  {
  unsigned short  :0;
  char v1;
  __tsu64  :0;
};
//SIG(1 BFu0s_C_BFu0ll) C1{ Fs:0 Fc FL:0}



static void Test_BFu0s_C_BFu0ll()
{
  {
    init_simple_test("BFu0s_C_BFu0ll");
    static STRUCT_IF_C BFu0s_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu0ll, BFu0s_C_BFu0ll)
//============================================================================


struct  BFu0s_C_BFu0s  {
  unsigned short  :0;
  char v1;
  unsigned short  :0;
};
//SIG(1 BFu0s_C_BFu0s) C1{ Fs:0 Fc Fs:0}



static void Test_BFu0s_C_BFu0s()
{
  {
    init_simple_test("BFu0s_C_BFu0s");
    static STRUCT_IF_C BFu0s_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_C_BFu0s)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu0s, BFu0s_C_BFu0s)
//============================================================================


struct  BFu0s_C_BFu15i  {
  unsigned short  :0;
  char v1;
  unsigned int v2:15;
};
//SIG(1 BFu0s_C_BFu15i) C1{ Fs:0 Fc Fi:15}



static void Test_BFu0s_C_BFu15i()
{
  {
    init_simple_test("BFu0s_C_BFu15i");
    static STRUCT_IF_C BFu0s_C_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_C_BFu15i)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_C_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu15i, BFu0s_C_BFu15i)
//============================================================================


struct  BFu0s_C_BFu15ll  {
  unsigned short  :0;
  char v1;
  __tsu64 v2:15;
};
//SIG(1 BFu0s_C_BFu15ll) C1{ Fs:0 Fc FL:15}



static void Test_BFu0s_C_BFu15ll()
{
  {
    init_simple_test("BFu0s_C_BFu15ll");
    static STRUCT_IF_C BFu0s_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_C_BFu15ll)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu0s_C_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu0s_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu15ll, BFu0s_C_BFu15ll)
//============================================================================


struct  BFu0s_C_BFu15s  {
  unsigned short  :0;
  char v1;
  unsigned short v2:15;
};
//SIG(1 BFu0s_C_BFu15s) C1{ Fs:0 Fc Fs:15}



static void Test_BFu0s_C_BFu15s()
{
  {
    init_simple_test("BFu0s_C_BFu15s");
    static STRUCT_IF_C BFu0s_C_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_C_BFu15s)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu0s_C_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu0s_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu15s, BFu0s_C_BFu15s)
//============================================================================


struct  BFu0s_C_BFu16i  {
  unsigned short  :0;
  char v1;
  unsigned int v2:16;
};
//SIG(1 BFu0s_C_BFu16i) C1{ Fs:0 Fc Fi:16}



static void Test_BFu0s_C_BFu16i()
{
  {
    init_simple_test("BFu0s_C_BFu16i");
    static STRUCT_IF_C BFu0s_C_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_C_BFu16i)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_C_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu16i, BFu0s_C_BFu16i)
//============================================================================


struct  BFu0s_C_BFu16ll  {
  unsigned short  :0;
  char v1;
  __tsu64 v2:16;
};
//SIG(1 BFu0s_C_BFu16ll) C1{ Fs:0 Fc FL:16}



static void Test_BFu0s_C_BFu16ll()
{
  {
    init_simple_test("BFu0s_C_BFu16ll");
    static STRUCT_IF_C BFu0s_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_C_BFu16ll)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu0s_C_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu0s_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu16ll, BFu0s_C_BFu16ll)
//============================================================================


struct  BFu0s_C_BFu16s  {
  unsigned short  :0;
  char v1;
  unsigned short v2:16;
};
//SIG(1 BFu0s_C_BFu16s) C1{ Fs:0 Fc Fs:16}



static void Test_BFu0s_C_BFu16s()
{
  {
    init_simple_test("BFu0s_C_BFu16s");
    static STRUCT_IF_C BFu0s_C_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_C_BFu16s)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu0s_C_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu0s_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu16s, BFu0s_C_BFu16s)
//============================================================================


struct  BFu0s_C_BFu17i  {
  unsigned short  :0;
  char v1;
  unsigned int v2:17;
};
//SIG(1 BFu0s_C_BFu17i) C1{ Fs:0 Fc Fi:17}



static void Test_BFu0s_C_BFu17i()
{
  {
    init_simple_test("BFu0s_C_BFu17i");
    static STRUCT_IF_C BFu0s_C_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_C_BFu17i)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_C_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu17i, BFu0s_C_BFu17i)
//============================================================================


struct  BFu0s_C_BFu17ll  {
  unsigned short  :0;
  char v1;
  __tsu64 v2:17;
};
//SIG(1 BFu0s_C_BFu17ll) C1{ Fs:0 Fc FL:17}



static void Test_BFu0s_C_BFu17ll()
{
  {
    init_simple_test("BFu0s_C_BFu17ll");
    static STRUCT_IF_C BFu0s_C_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_C_BFu17ll)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu0s_C_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu0s_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu17ll, BFu0s_C_BFu17ll)
//============================================================================


struct  BFu0s_C_BFu1c  {
  unsigned short  :0;
  char v1;
  unsigned char v2:1;
};
//SIG(1 BFu0s_C_BFu1c) C1{ Fs:0 Fc Fc:1}



static void Test_BFu0s_C_BFu1c()
{
  {
    init_simple_test("BFu0s_C_BFu1c");
    static STRUCT_IF_C BFu0s_C_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_C_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_C_BFu1c)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu1c, BFu0s_C_BFu1c)
//============================================================================


struct  BFu0s_C_BFu1i  {
  unsigned short  :0;
  char v1;
  unsigned int v2:1;
};
//SIG(1 BFu0s_C_BFu1i) C1{ Fs:0 Fc Fi:1}



static void Test_BFu0s_C_BFu1i()
{
  {
    init_simple_test("BFu0s_C_BFu1i");
    static STRUCT_IF_C BFu0s_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_C_BFu1i)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu1i, BFu0s_C_BFu1i)
//============================================================================


struct  BFu0s_C_BFu1ll  {
  unsigned short  :0;
  char v1;
  __tsu64 v2:1;
};
//SIG(1 BFu0s_C_BFu1ll) C1{ Fs:0 Fc FL:1}



static void Test_BFu0s_C_BFu1ll()
{
  {
    init_simple_test("BFu0s_C_BFu1ll");
    static STRUCT_IF_C BFu0s_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu0s_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_C_BFu1ll)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu1ll, BFu0s_C_BFu1ll)
//============================================================================


struct  BFu0s_C_BFu1s  {
  unsigned short  :0;
  char v1;
  unsigned short v2:1;
};
//SIG(1 BFu0s_C_BFu1s) C1{ Fs:0 Fc Fs:1}



static void Test_BFu0s_C_BFu1s()
{
  {
    init_simple_test("BFu0s_C_BFu1s");
    static STRUCT_IF_C BFu0s_C_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu0s_C_BFu1s)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu0s_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu1s, BFu0s_C_BFu1s)
//============================================================================


struct  BFu0s_C_BFu31i  {
  unsigned short  :0;
  char v1;
  unsigned int v2:31;
};
//SIG(1 BFu0s_C_BFu31i) C1{ Fs:0 Fc Fi:31}



static void Test_BFu0s_C_BFu31i()
{
  {
    init_simple_test("BFu0s_C_BFu31i");
    static STRUCT_IF_C BFu0s_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_C_BFu31i)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu0s_C_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu0s_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu31i, BFu0s_C_BFu31i)
//============================================================================


struct  BFu0s_C_BFu31ll  {
  unsigned short  :0;
  char v1;
  __tsu64 v2:31;
};
//SIG(1 BFu0s_C_BFu31ll) C1{ Fs:0 Fc FL:31}



static void Test_BFu0s_C_BFu31ll()
{
  {
    init_simple_test("BFu0s_C_BFu31ll");
    static STRUCT_IF_C BFu0s_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_C_BFu31ll)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu0s_C_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu0s_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu31ll, BFu0s_C_BFu31ll)
//============================================================================


struct  BFu0s_C_BFu32i  {
  unsigned short  :0;
  char v1;
  unsigned int v2:32;
};
//SIG(1 BFu0s_C_BFu32i) C1{ Fs:0 Fc Fi:32}



static void Test_BFu0s_C_BFu32i()
{
  {
    init_simple_test("BFu0s_C_BFu32i");
    static STRUCT_IF_C BFu0s_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_C_BFu32i)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu0s_C_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu0s_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu32i, BFu0s_C_BFu32i)
//============================================================================


struct  BFu0s_C_BFu32ll  {
  unsigned short  :0;
  char v1;
  __tsu64 v2:32;
};
//SIG(1 BFu0s_C_BFu32ll) C1{ Fs:0 Fc FL:32}



static void Test_BFu0s_C_BFu32ll()
{
  {
    init_simple_test("BFu0s_C_BFu32ll");
    static STRUCT_IF_C BFu0s_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_C_BFu32ll)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu0s_C_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu0s_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu32ll, BFu0s_C_BFu32ll)
//============================================================================


struct  BFu0s_C_BFu33  {
  unsigned short  :0;
  char v1;
  __tsu64 v2:33;
};
//SIG(1 BFu0s_C_BFu33) C1{ Fs:0 Fc FL:33}



static void Test_BFu0s_C_BFu33()
{
  {
    init_simple_test("BFu0s_C_BFu33");
    static STRUCT_IF_C BFu0s_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu0s_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu0s_C_BFu33)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu0s_C_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu0s_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu33, BFu0s_C_BFu33)
//============================================================================


struct  BFu0s_C_BFu7c  {
  unsigned short  :0;
  char v1;
  unsigned char v2:7;
};
//SIG(1 BFu0s_C_BFu7c) C1{ Fs:0 Fc Fc:7}



static void Test_BFu0s_C_BFu7c()
{
  {
    init_simple_test("BFu0s_C_BFu7c");
    static STRUCT_IF_C BFu0s_C_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu0s_C_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu0s_C_BFu7c)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_C_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu7c, BFu0s_C_BFu7c)
//============================================================================


struct  BFu0s_C_BFu7i  {
  unsigned short  :0;
  char v1;
  unsigned int v2:7;
};
//SIG(1 BFu0s_C_BFu7i) C1{ Fs:0 Fc Fi:7}



static void Test_BFu0s_C_BFu7i()
{
  {
    init_simple_test("BFu0s_C_BFu7i");
    static STRUCT_IF_C BFu0s_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu0s_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu0s_C_BFu7i)");
    check_field_offset(lv, v1, 0, "BFu0s_C_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu0s_C_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu0s_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu0s_C_BFu7i, BFu0s_C_BFu7i)
//============================================================================

